第一道:
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
看到这道题,最初的想法就是把不是0的遍历放到另一个数组里面,剩下的补成0.第一种做法:
class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
for(int n : nums){
if(n!=0){
nums[j++] = n;
}
}
for(int i=j;i<nums.length;i++){
nums[i] = 0;
}
}
}
看了一下官方的题解,是利用双指针的思想,每次把是0的和非0的交换位置,最后是0的都放到了最后面。第二种做法。
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length, left = 0, right = 0;
while (right < n) {
if (nums[right] != 0) {
swap(nums, left, right);