
思路:
定义两个指针(int类型),left指向已经排序的尾部,right指向未排序的头部;
right 每次循环都+1
只有right不是0时,两个指针所指向元素交换,left+1
若right=0,则不交换,left不移动.
//如果数组没有0,那么快慢指针始终指向同一个位置,每个位置自己和自己交换; //如果数组有0,快指针先走一步,此时慢指针对应的就是0,所以要交换。
class Solution { public: void moveZeroes(vector<int>& nums) { int n = nums.size(), left = 0, right = 0; //定义了两个指针left,right //left指向已经处理好的序列的尾部 //right指向未被处理的序列的头部 while (right < n) { //如果数组没有0,那么快慢指针始终指向同一个位置,每个位置自己和自己交换; //如果数组有0,快指针先走一步,此时慢指针对应的就是0,所以要交换。 if (nums[right]) { //如果nums[right]非0,则交换顺序,left+1,right+1;若为0,则right+1 //右指针是不断向右移动的 swap(nums[left], nums[right]); left++; } right++; } } };

8万+

被折叠的 条评论
为什么被折叠?



