解题思路:双指针思想 利用两个for循环,第一个for循环把所有非0的全部移到前面,第二个for循环将指针放在非0的末尾全部加上0。
还有一种解法就是利用while循环双指针条件,当不为0就两个指针一起移动 ,为0就只移动右指针。不为0时交换左右数值,为0就不交换了。
(如果数组没有0,那么快慢指针始终指向同一个位置,每个位置自己和自己交换;如果数组有0,快指针先走一步,此时慢指针对应的就是0,所以要交换。)
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j= 0;
for(int i = 0;i<nums.size();i++){
if(nums[i]){
nums[j++] = nums[i];
}
}
for(int i = j; i<nums.size();i++){
nums[i] = 0;
}
}
};
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size(), left = 0, right = 0;
while (right < n) {
if (nums[right]) {
swap(nums[left], nums[right]);
left++;
}
right++;
}
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/move-zeroes/solutions/489622/yi-dong-ling-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。