给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
题解双指针:
- 初始化双指针i、j;
- 当前指针 j 所指位置为0时,i不动,j++;
- 指针 j 所指位置不为0时,将 j 所指位置指向 i 指针位置,i++,j++;
- 当指针 j 跳出数组,记录当前i;
题解一:
- 得到循环完毕的数组和指针i;
- 对后续数组进行循环,后续值直接赋值0;
public void moveZeroes(int[] nums) {
if (null == nums) {
return;
}
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (0 != nums[i]) {
nums[j++] = nums[i];
}
}
for (int i = j; i < nums.length; i++) {
nums[i] = 0;
}
}
题解二:
- 当指针 j 超过数组长度,不跳出循环;
- 对指针 i 后续的数组直接赋值0,i 等于数组长度时,跳出循环。
public void moveZeroes(int[] nums) {
if (nums == null) {
return ;
}
for (int i = 0,j = 0; j < nums.length; i++) {
if (i < nums.length && nums[i] != 0) {
nums[j++] = nums[i];
}
if (i >= nums.length) {
nums[j++] = 0;
}
}
}
标签:nums,++,int,length,数组,283,移动,LeetCode,指针
From: https://blog.51cto.com/u_16280730/8340032