283. 移动零

283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:
输入: nums = [0]
输出: [0]

提示:

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1

题目解析:把数组中为0的元素移动到数组末尾,在不能新创建数组的情况下完成;数组中数字顺序不能改变

思路:直观想法遍历扫描每一个元素,遇到0就把这个元素跟末尾元素交换;但这样可能会打乱数组的元素顺序;
换一个思路 每扫描到一个非零的数字就把它向前移动,遇到零就跳过;这样循环往复就可以在保证顺序的情况下把非零数字都移动到前面,同时也相当于把零移动到数组的末尾



class Solution {

    public void moveZeroes(int[] nums) {
       
       //0.空数组或元素少于1个 不需要处理
       if(nums==null||nums.length<=1) return;

       //1.设可以保存非零数值的起始位置
       int curr = 0;
       //2.遍历交换非零数值到数组前面
       for(int i = 0;i<nums.length;i++) {
          //扫描到0就跳过
          if(nums[i]==0) continue;
          //来到这里说明不是0,那就移动数值到可以保存的索引位
          if(curr != i) {
              nums[curr] = nums[i];
              //移动完后补充当前位置数值为0
              nums[i] = 0;
          }
          curr++;
       }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 思路1:目的是将所...
    阿里猴阅读 1,072评论 0 0
  • 题目链接难度:简单 类型: 数组 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾...
    wzNote阅读 2,744评论 0 3
  • 题目 给定一个数组 nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。 方法一:双指针 ...
    草莓桃子酪酪阅读 1,040评论 0 0
  • 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不...
    饼干不干阅读 1,072评论 0 0
  • 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 ...
    PuKKA_任伟阅读 1,679评论 0 0

友情链接更多精彩内容