283. 移动零
题目:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
思路:
双指针
我们定义两个指针,i指针和j指针,i指针用来遍历整个nums数组,j指针用来放置nums数组元素。然后将非0元素按照原有的相对顺序都放置到nums数组前面,剩下的位置都置为0。这样我们就完成了0元素的移动,同时也保持了非0元素的相对顺序。
具体过程如下:
1.定义两个指针i和j,初始化i = 0, k = 0;
2.i指针向后移动,遍历整个nums数组,如果nums[i] != 0,也就是说遇到了非0元素,此时我们就将nums[i]元素放置到nums[j]位置,同时j++后一位。
3.最后将j位置之后的元素都赋值为0。
代码:
class Solution {
public void moveZeroes(int[] nums) {
//定义两个指针i和j
int i;
int j = 0;
//i指针遍历整个nums数组,j指针放置nums数组元素
for (i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
//将j位置之后的元素都赋值为0
while (j < nums.length) {
nums[j++] = 0;
}
}
}
转载:
如有冒犯请私信我删除
链接:https://leetcode.cn/problems/move-zeroes/solution/283-yi-dong-ling-shuang-zhi-zhen-zuo-fa-6wmvs/