【LeetCode】—— 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
1 class Solution { 2 public void moveZeroes(int[] nums) { 3 //丢掉0,重新更新数组 4 int left =0; 5 for (int num:nums){ 6 if (num != 0){ 7 nums[left++] = num; 8 } 9 } 10 for (int i=left;i<nums.length;i++){ 11 nums[i]=0; 12 } 13 } 14 }
class Solution { public void moveZeroes(int[] nums) { // 左右指针 // 左指针左边都是非零,其右边到右指针都是0 int left=0,right =0; while (right<nums.length){ if(nums[right]!=0){ // 如果右指针非0,则和左指针交换 swap(nums,left,right); // 更新左指针 left++; } right++; } } // 交换两个位置的数组 public void swap(int[] nums,int left,int right){ int tmp = nums[left]; nums[left] = nums[right]; nums[right] = tmp; } }
解题关键:
解法一:先不管0,再补充0;更换索引
解法二:双指针
class Solution {
public void moveZeroes(int[] nums) {
//丢掉0,重新更新数组
int left =0;
for (int num:nums){
if (num != 0){
nums[left++] = num;
}
}
for (int i=left;i<nums.length;i++){
nums[i]=0;
}
}
}

浙公网安备 33010602011771号