先贴一个非常丑陋的写法,头痛医头,脚痛医脚,然后就会写出这种屎一样的代码。。。
用step完全是因为用i计数会出问题
这个算法是O(N^2)的复杂度。。。
class Solution {
public void moveZeroes(int[] nums) {
int end = nums.length - 1;
int step = 0;
for(int i=0;i < nums.length;i++) {
if(step++ >= nums.length)
break;
if(nums[i] == 0){
for(int j=i;j < nums.length-1;j++) {
nums[j] = nums[j+1];
}
if(end - 1 >= 0)
nums[end--] = 0;
i--;
}
}
}
}
参考了下答案,这个解法快多了,因为是O(N)的复杂度
class Solution {
public void moveZeroes(int[] nums) {
int j=0;
for(int i=0;i < nums.length;i++) {
if(nums[i] != 0){
if(i != j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
j++;
}
}
}
}