【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;
        }
    }
}
posted @ 2021-11-20 23:57  吾辈当奋斗-生生不息  阅读(30)  评论(0)    收藏  举报