Skip to content

Latest commit

 

History

History
83 lines (67 loc) · 2.33 KB

File metadata and controls

83 lines (67 loc) · 2.33 KB

https://leetcode-cn.com/problems/move-zeroes/solution/283yi-dong-ling-shuang-zhi-zhen-yi-chu-y-kgkh/

难度:简单

题目

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

说明:

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

示例

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

分析

这道题有两个思路,都满足题目的要求。 双指针

  1. 初始left、right 指针都指向下标0
  2. 开始移动right指针,当right指针不等于0是,左右指针对应元素互换 移除元素 类似题目:27.移除元素
  3. 初始化left = 0,然后开始循环数组,遇到非0的数字,赋值给left,left+=1
  4. 循环left走到len(nums) - 1,将剩余的index都替换成0.

双指针

class Solution:
    def moveZeroes(self, nums):
        l = r = 0
        while r < len(nums):
            if nums[r] != 0:
                nums[l], nums[r] = nums[r], nums[l]
                l += 1
            r += 1
class Solution {
    public void moveZeroes(int[] nums) {
        int left = 0;
        for (int right = 0; right < nums.length; right++) {
            if (nums[right] != 0) {
                int tmp = nums[right];
                nums[right] = nums[left];
                nums[left] = tmp;
                left++;
            }
        }
    }
}

移除元素解题

class Solution:
    def moveZeroes(self, nums):
        left = 0
        for i in nums:
            if i != 0:
                nums[left] = i
                left += 1
        
        while left < len(nums):
            nums[left] = 0
            left += 1

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

有喜欢力扣刷题的小伙伴可以加我微信(King_Uranus)互相鼓励,共同进步,一起玩转超级码力!

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown