leetcode283题


使用双指针
示例(该方法用时高达2ms)
class Solution {
public void moveZeroes(int[] nums) {
int index_0 = 0;
int index_no_0 = 0;
while (true) {
if (index_0 >= nums.length || index_no_0 >= nums.length) {
break;
}
if (nums[index_no_0] == 0) {
index_no_0++;
continue;
}
if (nums[index_0] != 0) {
index_0++;
continue;
}
if (index_0 >= index_no_0) {
index_no_0 = index_0;
continue;
}
nums[index_0] = nums[index_no_0];
nums[index_no_0] = 0;
index_no_0++;
index_0++;
}
}
}
示例2:
index_no_0记录非零数,只要nums[i] != 0,就将值赋给nums[index_no_0],同时index_no_0加一
大致图

class Solution {
public void moveZeroes(int[] nums) {
if (nums == null) {
return;
}
int index_no_0 = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[index_no_0++] = nums[i];
}
}
for (int i = index_no_0; i < nums.length; i++) {
nums[i] = 0;
}
}
}

