1.LeetCode算法习题讲解--双指针--移动零

一.题目

习题链接:283. 移动零 - 力扣(LeetCode)

二.题目分析

给定一个数组,在原数组上进行修改,数组左侧为非0,右侧为0

  1. 约束 1 :非 0 元素原有先后相对顺序不能改变
  2. 约束 2原地修改数组,不能新开数组复制数据(空间复杂度尽量\(O(1)\));

三.讲解算法原理

定义两个指针 cur 和 dest,cur用来遍历数组,dest指向0与非0的边界线

只要 nums[cur] 不是 0,就把这个元素归入左侧合法区间:

  1. dest 先往右挪一位(开辟出新的存放位置);
  2. nums[cur] 赋值到 nums[dest]; 遍历结束后,[0, dest] 全是按原顺序保留的非 0 数,dest+1 到数组末尾全部填 0。

当cur指向非0元素,dest++ 然后与 cur所指向的位置进行互换

过程:

示例:nums = [0,1,0,3,12]dest=-1,cur=0

  1. cur=0nums[0]=0:直接跳过,不处理
  2. cur=1nums[1]=1≠0 dest +=1 → dest=0 nums[0] = 1 此时有效区间:[0,0],内容[1]
  3. cur=2nums[2]=0:跳过
  4. cur=3nums[3]=3≠0 dest +=1 → dest=1 nums[1] = 3 有效区间:[0,1],内容[1,3]
  5. cur=4nums[4]=12≠0 dest +=1 → dest=2 nums[2] = 12 有效区间:[0,2],内容[1,3,12]

一轮遍历完毕,dest=2; 对下标 3、4 全部赋值 0,最终数组:[1,3,12,0,0]

四.编写代码

相关推荐
不会代码的小猴7 小时前
标准模板库(STL)
开发语言·c++·笔记·算法
ZhouDevin7 小时前
算法论文/高效微调4——DoRA:权重分解的低秩适配方法
算法
evans在进步7 小时前
LeetCode 200:岛屿数量——Java DFS 染色法详解
java·leetcode·深度优先
AI探索先锋8 小时前
A* 路径规划:四种算法的进化史-学习
学习·算法
旖旎夜光8 小时前
LeetCode 202:快乐数(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
cpp_25019 小时前
P1113 [USACO02FEB] 杂务
数据结构·c++·算法·动态规划·图论·拓扑排序·洛谷题解
月光船幽幽9 小时前
门控函数SHS阈值与调制机制解析
人工智能·python·算法
测试19989 小时前
2026全新软件测试面试八股文(含答案+文档)
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
Doraemomo9 小时前
数据结构-哈希表
数据结构·算法·散列表
君君思密达9 小时前
Leetcode Hot 100 题目详解-哈希表
数据结构·算法·leetcode