一开始写的错误代码:
class Solution {
public void moveZeroes(int[] nums) {
int left=0;
int right=1;
while(right<=nums.length-1){
if(nums[right]!=0){
exchange(nums,left,right);
}
left++;
right++;
}
}
public void exchange(int nums[],int left,int right){
int temp = nums[right];
nums[right]=nums[left];
nums[left]=temp;
}
}
当nums[right]为0时,right就会直接+1,就不能把0移到后面(一开始right=0也不行)
正确代码:
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length, left = 0, right = 0;
while (right < n) {
if (nums[right] != 0) {
swap(nums, left, right);
left++;
}
right++;
}
}
public void swap(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/move-zeroes/solution/yi-dong-ling-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结:
一开始遇到题不能总是想用for来遍历数组。