每日算法(双指针算法)(Day 1)

双指针算法

1.算法题目(移动零)

2.讲解算法原理

数组划分,数组分块(快排里面最核心的一步)只需把0改为tmp

双指针算法:利用数组下标来充当指针

两个指针的作用:
cur:从做往右扫描数组,遍历数组
dest:已处理的区间内,非零元素的最后一个位置

三个区间:

0,dest\] ,\[dest+1,cur-1\] , \[cur,n-1

按序依次是非0,0,待处理

  • 当cur=n时 变成


先让dest指向下标为-1的位置,cur指向下标为0的元素,此时元素为0,cur++,cur指向的元素为1,这时dest++,然后交换dest和cur指向的元素,也就是交换0和1的位置。

总结:cur从前往后遍历的过程中

  1. 遇到0元素:cur++
  2. 遇到非0元素:
cpp 复制代码
swap(dest+1,cur);
dest++,cur++;

3.编写代码

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums)
    {
        for (int cur = 0; int dest = -1; cur < nums.size(); cur++)
            if (nums[cur])//处理非零元素
                swap(nums[++dest], nums[cur]);
    }
};
相关推荐
DataFunTalk1 分钟前
乐信集团副总经理周道钰亲述 :乐信“黎曼”异动归因系统的演进之路
前端·后端·算法
行走的bug...7 分钟前
sklearn估计器和变换器共有的一些方法 待更新
人工智能·算法·sklearn
DataFunTalk12 分钟前
开源一个MCP+数据库新玩法,网友直呼Text 2 SQL“有救了!”
前端·后端·算法
xiaowu08022 分钟前
C#设计模式-状态模式
设计模式·c#·状态模式
编程侦探34 分钟前
【设计模式】适配器模式:让不兼容的接口和谐共处
开发语言·c++·设计模式·适配器模式
2401_845417451 小时前
C++ string类
java·开发语言·c++
Y.O.U..1 小时前
力扣HOT100——560.和为k的子数组
数据结构·c++·算法·leetcode
wuqingshun3141591 小时前
经典算法 判断一个图中是否有环
java·开发语言·数据结构·c++·算法·蓝桥杯·深度优先
柃歌1 小时前
【LeetCode Solutions】LeetCode 160 ~ 165 题解
数据结构·算法·leetcode
小森77671 小时前
(五)机器学习---决策树和随机森林
算法·决策树·随机森林·机器学习·分类算法