题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
想法
一开始想着直接交换0,但是还是有些问题。后来给0加计数器。
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length;
int zeroCount = 0;
for(int i = 0 ; i<n;i++)
{
if(nums[i] == 0)
{
zeroCount++;
}
if(zeroCount>0&&nums[i]!= 0)
{
int temp = nums[i-zeroCount];
nums[i-zeroCount] = nums[i];
nums[i] = temp;
}
}
}
}
总结
这道题简单,第一次想错了,第二次就写出来了,其中写了一个swap,当时swap没吊用,不知道怎么回事,就没用了,直接把swap方法写入if里面了。
数组的题一般都有一些巧妙解法,不能硬来,哈哈。这道题我超过了100%耶。