LeetCode-283移动零
  3agd4Sagrx5S 2023年11月15日 28 0

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

题解双指针:



LeetCode-283移动零_数组

  1. 初始化双指针i、j;
  2. 当前指针 j 所指位置为0时,i不动,j++;
  3. 指针 j 所指位置不为0时,将 j 所指位置指向 i 指针位置,i++,j++;
  4. 当指针 j 跳出数组,记录当前i;

题解一:

  1. 得到循环完毕的数组和指针i;
  2. 对后续数组进行循环,后续值直接赋值0;
public void moveZeroes(int[] nums) {
        if (null == nums) {
            return;
        }
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (0 != nums[i]) {
                nums[j++] = nums[i];
            }
        }
        for (int i = j; i < nums.length; i++) {
            nums[i] = 0;
        }

    }

LeetCode-283移动零_双指针_02


题解二:

  1. 当指针 j 超过数组长度,不跳出循环;
  2. 对指针 i 后续的数组直接赋值0,i 等于数组长度时,跳出循环。
public void moveZeroes(int[] nums) {
        if (nums == null) {
            return ;
        }
        for (int i = 0,j = 0; j < nums.length; i++) {
            if (i < nums.length && nums[i] != 0) {
                nums[j++] = nums[i];
            }
            if (i >= nums.length) {
                nums[j++] = 0;
            }
        }
    }

LeetCode-283移动零_双指针_03

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
3agd4Sagrx5S