资讯专栏INFORMATION COLUMN

LeetCode 283:移动零 Move Zeroes

tianyu / 2285人阅读

摘要:给定一个数组,编写一个函数将所有移动到数组的末尾,同时保持非零元素的相对顺序。尽量减少操作次数。换个思路,把非数字前移,不去管数字。这样遍历完之后,数组索引从到之间的数值即为所求得保持非零元素的相对顺序,而之后的数值只需要全部赋值即可。

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

Given an array nums, write a function to move all 0"s to the end of it while maintaining the relative order of the non-zero elements.

示例:

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

说明:

必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。

Note:

You must do this in-place without making a copy of the array.

Minimize the total number of operations.

解题思路:

​ 千万不要被题目局限了思维!题目让把所有0移到末尾,如果你的思路是遇零与末尾数字交换位置,然后还需要把非零数字排序,那么就被带偏了。

​ 换个思路,把非 0 数字前移,不去管数字 0

定义两个指针:指针 i 直接遍历数组遇到非 0 数字把该数字赋值给指针 j 所在的索引,索引 j 自增 1,i继续遍历。

这样遍历完之后,数组索引从0到 j 之间的数值即为所求得保持非零元素的相对顺序,而 j 之后的数值只需要全部赋值 0 即可。

Java:
class Solution {
    public void moveZeroes(int[] nums) {
        int numsLen = nums.length;
        if (numsLen < 1) return;//数组长度小于一直接返回
        int j = 0;
        for (int i = 0; i < numsLen; i++) {//遍历数组
            if (nums[i] != 0) {//如果该数不为0
                nums[j++] = nums[i];//赋值给索引j
            }
        }
        while (j < numsLen) nums[j++] = 0;//把从j到末尾所有数字赋值0
    }
}
Python3:
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        if len(nums) < 1:
            return
        j = 0
        for num in nums:
            if num != 0:
                nums[j] = num
                j += 1
        for i in range(j, len(nums)):
            nums[i] = 0

如果题目不限制在原数组上操作,用python一行可解决:

nums = [i *for* i in nums *if* i != 0]+[i *for* i in nums *if* i == 0]

公众号:  爱写bug(ID:iCodeBugs)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75338.html

相关文章

  • LeetCode 283移动 Move Zeroes

    摘要:给定一个数组,编写一个函数将所有移动到数组的末尾,同时保持非零元素的相对顺序。尽量减少操作次数。换个思路,把非数字前移,不去管数字。这样遍历完之后,数组索引从到之间的数值即为所求得保持非零元素的相对顺序,而之后的数值只需要全部赋值即可。 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 Given an array nums, write ...

    seanlook 评论0 收藏0
  • leetcode刷题:283.Move Zeroes(Easy)

    摘要:解法目的就是把一个数组中所有为的数移动到数组的尾部,并保证其他元素相对位置不变。要求是在原数组上修改,不要额外引入其他的数组尽量减少操作次数。在小游戏中,设置了和界面一致的二维数组,数组的每一位记录了一个数字。 地址:https://leetcode.com/problems/move-zeroes/ 应用场景说明 这个题是很Easy的一道题,它的应用场景是在我尝试写小游戏2048时,...

    ckllj 评论0 收藏0
  • leetcode 283 Move Zeroes

    题目详情 Given an array nums, write a function to move all 0s to the end of it while maintaining the relative order of the non-zero elements.For example, given nums = [0, 1, 0, 3, 12], after calling your ...

    RobinQu 评论0 收藏0
  • Leetcode PHP题解--D68 283. Move Zeroes

    摘要:题目链接题目分析给定一个整数数组,将值为的元素移动到数组末尾,而不改动其他元素出现的顺序。再在去后的元素末尾填充到计算出的数组长度。最终代码若觉得本文章对你有用,欢迎用爱发电资助。 D68 283. Move Zeroes 题目链接 283. Move Zeroes 题目分析 给定一个整数数组,将值为0的元素移动到数组末尾,而不改动其他元素出现的顺序。 思路 计算总共有多少个元素。 再...

    xiongzenghui 评论0 收藏0
  • [Leetcode] Move Zeroes 移动

    摘要:双指针压缩法复杂度时间空间思路实际上就是将所有的非数向前尽可能的压缩,最后把没压缩的那部分全置就行了。比如,先压缩成,剩余的为全置为。过程中需要一个指针记录压缩到的位置。 Move Zeroes Given an array nums, write a function to move all 0s to the end of it while maintaining the rel...

    baiy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<