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)

  • 相关阅读:
    工作感悟
    9/10记事
    总结几份工作的感悟
    四次原则
    在UC浏览器上很炫的一个效果
    php跨服务器传递对象
    wdlinux一键安装包
    手机号码4位隐藏
    php中英文字符串转字母转大小写
    MySQL添加用户、删除用户与授权
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14729928.html
Copyright © 2011-2022 走看看