![[LeetCode] 283、移动零](http://pic.xiahunao.cn/yaotu/[LeetCode] 283、移动零)
题目描述给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。示例输入:[0,1,0,3,12]输出:[1,3,12,0,0]说明必须在原数组上操作不能拷贝额外的数组。尽量减少操作次数。解题思路双指针快慢指针慢指针left可以理解为非零元素的最右边界快指针right顺序往后遍历根据nums[right]是否等于0做不同的操作即可。参考代码之前的辣鸡代码classSolution{public:voidmoveZeroes(vectorintnums){intlengthnums.size();if(length1)return;for(inti0;ilength;i){// 注意两个指针的循环/遍历方向if(nums[i]!0)continue;for(intji;jlength;j){if(nums[j]!0){swap(nums[i],nums[j]);break;}}}}};简单题但是真正手写代码时还是得多举几个例子验证注意代码的边界条件改进之后用双指针简单直白题解参考https://leetcode.cn/problems/move-zeroes/solutions/90229/dong-hua-yan-shi-283yi-dong-ling-by-wang_ni_ma/类似快排的思路// 一样的逻辑classSolution{public:voidmoveZeroes(vectorintnums){intleft0;intright0;// 可以理解为非0的最右边界while(rightnums.size()){if(nums[right]!0){swap(nums[left],nums[right]);}else{right;}}return;}};