1.问题描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序
注意
必须在不复制数组的情况下原地对数组进行操作
示例1
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例2
输入: nums =[0]
输出:[0]
提示
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
难度等级
简单
题目链接
移动零
2.解题思路
这道移动零的题,典型的双指针问题,定义一个指针用来遍历数组(指针i),另一个指针来将非0元素移动到数组前面(指针p)。
int p1 = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] != 0){
nums[p1++] = nums[i];
}
}
经过一个for循环之后,所有的非0元素都被移动到了数组的前面,然后再用一个循环将数组后面剩余的地方全部置为0就好了。
while(p1 < nums.length){
nums[p1++] = 0;
}
3.代码展示
class Solution {
public void moveZeroes(int[] nums) {
int p1 = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] != 0){
nums[p1++] = nums[i];
}
}
while(p1 < nums.length){
nums[p1++] = 0;
}
}
}
4.总结
这道题没啥我觉得,就是一个拿数,一个写数。大家就看个乐呵就行啦。