【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){ 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; } } }