283. 移动零--LeetCode__双指针

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路
	用一个索引变量j指向零元素的位置,再用一个所以变量i指向非零元素的位置
	0~j-1是处理好的数据元素,j到nums.size()是未处理的数据元素
	当我们找到一个非零元素时,与零元素位置做一个交换swap(nums[j],nums[i]);
	最终就能将所有的零元素放到末尾
	
	疑点:
		nums[j]一定为零吗?
		如果nums[j]不为0,i一定等于j
		为什么i一定等于j?
			因为i是从头到尾遍历的,如果nums[j:i-1]里有非零元素,那两者就矛盾了,所以nums[j:i-1]只会有零元素

代码如下


class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        for(int i=0,j=0;i<nums.size();i++){
            if(nums[i]){
                swap(nums[j++],nums[i]);
            }
        }
    }
};

posted @ 2022-08-12 09:44  MZ0o0  阅读(30)  评论(0)    收藏  举报