leetcode hot100刷题日记——3.移动零
解答:
class Solution {
public:void moveZeroes(vector<int>& nums) {//方法1:把非零数往前提,后面直接补0(易于理解)// int index=0;// for(int i=0;i<nums.size();i++){// if(nums[i]!=0){// nums[index++]=nums[i];// }// }// for(int i=index;i<nums.size();i++){// nums[i]=0;// }// return;//方法二:左右指针(巧妙)int left=0,right=0;while(right<nums.size()){if(nums[right]!=0){swap(nums[right],nums[left]);left++;//左指针只有交换后才往右挪。why?//当nums[right]不是0的时候//一开始left=right自己交换自己,没啥影响//后面left会跟着right走,但遇到nums[right]是0的时候,只有right走//相当于left保存了0在的位置!!!}right++;//右指针无论什么时候都要往右挪}}
};
时间复杂度:O(N)
空间复杂度:O(1)
思考:这个左右指针的方法,left指针可以保存0在的最左边的位置,从而只需交换操作就可完成。