Leetcode __283. 移动零

问题描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

  • 必须在原数组上操作,不能拷贝额外的数组。
  • 尽量减少操作次数。

解题思路

思想挺巧妙的,值得记录一下

  • 题目中要求只能在原有的数组中操作,且不申请额外数组,操作次数要少
  • 理解:相对顺序:就是除去0外,原有的元素的相对排序,并非排序
  • 重新变换的数组:只有非0的保持原有顺序,其余都是0
  • 解题关键在于:按顺序记录非0元素的,其余位置为0
  • 则对数组重复赋值即可

实现

class Solution {
    public void moveZeroes(int[] nums) {
        if(nums==null||nums.length==0){
            return;
        }
        int index =0;
        for(int i =0;i<nums.length;i++){
            if(nums[i]!=0){
                nums[index++]=nums[i];
}
        }
        for(int j = index ;j<nums.length;j++){
            nums[j]=0;
        }
        
    }
}

对数组重新赋值,即坐标从0开始赋值即可。

猜你喜欢

转载自blog.csdn.net/Growing_way/article/details/83583339