LeetCode283 MoveZeroes
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
难度:easy
解答
解法一
取一个索引k
,数组区间 [0,k)中保存所有当前遍历过的非0元素,最后在[k, num.length)中补0。
public static void solve1(int[] nums){
int k=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0)
nums[k++]=nums[i];
}
for(int i=k;i<nums.length;i++){
nums[i]=0;
}
}
解法二
取一个索引k
,数组区间 [0,k)中保存所有当前遍历过的非0元素。遍历数组,对于当前元素不为0时,与k索引在的元素交换,就可以节省解法1中的补0操作。
public static void solve2(int[] nums){
int k=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
if(k!=i){
nums[k++]=nums[i];
nums[i]=0;
}else
k++;
}
}
}