当前位置: 首页 > article >正文

【OJ刷题】双指针问题

这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:OJ刷题入门到进阶
🌏代码仓库:


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述

目录

  • 1.题目介绍
  • 2.题目拆解:
  • 3.具体详情
  • 4.具体代码


1.题目介绍

难度:易
题目练习:移动零
题目信息:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。


2.题目拆解:

本质上:是数组划分、数组分块问题
特点是:在制定的标准下,把数组划分成若干个区间
解决方法:双指针算法(利用数组下标来充当指针)


3.具体详情

两个指针作用:

cur:从左往右扫描数组,遍历数组
dest:已处理的区间内,非零元素的最后一个位置(即分界线)
具体如图1所示:
在这里插入图片描述

图1

三个区间:

具体如图2所示:
在这里插入图片描述

图2

如何做到:
cur从前往后遍历的过程中:

1. 遇到零元素: cur++
2.遇到非零元素: swap(dest + 1, cur);
dest++,cur++;


4.具体代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        for(int step = -1, cur = 0; cur < nums.size(); cur++)
            if(nums[cur])
                swap(nums[++step], nums[cur]); 
    }
};

好的,到此为止啦,祝您变得更强
在这里插入图片描述

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

http://www.kler.cn/a/299416.html

相关文章:

  • 101 个 React 技巧和窍门
  • TP发邮件的功能如何实现?tp框架发送邮件?
  • 在Ubuntu上部署 Misskey 服务器
  • Spring 源码解读:使用FactoryBean创建复杂对象的实现
  • RK3576芯片在智能家居里中型智慧屏产品的应用方案分析
  • 不需要安装谷歌插件,使用使用IDEA自带的插件debug调试vue前端代码
  • 索尼发布新款PS5 Pro主机 算力与定价齐飞 9成玩家感叹“价格贵”
  • perforce 操作记录
  • 大模型解码Decoding方法总览
  • 对云原生架构的理解和思考
  • 鸿蒙(API 12 Beta6版)GPU加速引擎服务【空域GPU超分】
  • docker images
  • AppFlow:通过内网代理访问应用
  • 图像处理 -- ISP功能之局部对比度增强 LCE
  • [Postman]接口自动化测试入门
  • Windows安装Redis环境
  • Python 中常见的数据结构(一)
  • Html-理解前端开发中单位(em单位和rem单位)和网络地址
  • 魔方栈源码-网站在线玩魔方源码-云魔方
  • 分享几个国内可以使用 ChatGPT 的优秀网站推荐