zoukankan      html  css  js  c++  java
  • 每日leetcode-数组-283. 移动零

    分类:数组-数组的改变、移动

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

    说明:

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

    解题思路:

    一次遍历
    这里参考了快速排序的思想,快速排序首先要确定一个待分割的元素做中间点x,然后把所有小于等于x的元素放到x的左边,大于x的元素放到其右边。
    这里我们可以用0当做这个中间点,把不等于0(注意题目没说不能有负数)的放到中间点的左边,等于0的放到其右边。
    这的中间点就是0本身,所以实现起来比快速排序简单很多,我们使用两个指针i和j,只要nums[i]!=0,我们就交换nums[i]和nums[j]

    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            # if not nums:
            #     return 0
            # 两个指针i和j
            j = 0
            for i in range(len(nums)):
                # 当前元素!=0,就把其交换到左边,等于0的交换到右边
                if nums[i] != 0 :
                    nums[j],nums[i] = nums[i],nums[j]
                    j+=1

    时间复杂度: O(n)
    空间复杂度: O(1)

  • 相关阅读:
    第六章学习小结
    malloc iOS
    iOS事件传递机制
    对 runloop 的理解
    深恶痛绝重写setter和getter
    数据库常见问题总结
    iOS多应用自动打包
    一段文字中包含多种语言时行间距问题
    一个成熟应用的排版方案
    Flask纪要
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14729928.html
Copyright © 2011-2022 走看看