每日算法(双指针算法)(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]);
    }
};
相关推荐
纪伊路上盛名在4 分钟前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
fujisheng66115 分钟前
FUI 编译期装配实践:从反射注册到 Source Generator
c#·unity3d
水饺编程19 分钟前
编程数学:三角函数基础01,直角三角函数
c语言·c++·windows·visual studio
裕晟资质规划21 分钟前
军工保密资质二级申报的四个可量化硬条件:条文位置、数值口径与西安配套企业实务要点
java·服务器·网络·数据库·算法
LuminousCPP21 分钟前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法
初願致夕霞22 分钟前
C/C++传统程序内存分布(代码实测)
java·c语言·c++
牛油果子哥q24 分钟前
C++对接LLM完整工程:异步HTTP请求、JSON解析、超时容错、重连兜底
c++·http·json
智码看视界25 分钟前
.NET 10 推理大模型TensorSharp 3.3.0 部署实测:纯.NET推理引擎反超llama.cpp 1.5倍,DFlash2提速62%
c#·.net·llama.cpp·.net 10·tensorsharp·本地大模型推理·开源推理引擎
Nil20830 分钟前
leetcode 46全排列
算法·leetcode·职场和发展
辰烨chenye1 小时前
LeetCode Hot 100 题解 · 动态规划篇
算法·leetcode·动态规划