力扣代码学习日记五

这篇具有很好参考价值的文章主要介绍了力扣代码学习日记五。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem: 283. 移动零

思路

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

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

示例 1:

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

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

解题方法

  1. 可以使用双指针的方法来实现这个功能。一个指针用于遍历数组,另一个指针用于记录当前非零元素应该放置的位置。遍历数组时,将非零元素依次移到非零指针指向的位置,然后将非零指针后面的元素置为零。
  2. 除了双指针法和逐个移动非零元素到数组前面的方法外,还可以使用一种更简单的方法,即“零元素交换法”。具体步骤如下:
  • 使用一个指针 non_zero_pointer 来记录当前非零元素应该存放的位置。
  • 遍历数组,当遇到非零元素时,将其与 non_zero_pointer 指向的位置进行交换,并将 non_zero_pointer 后移一位。
    这种方法的优点是不需要额外的循环来将剩余位置置为零,只需要一次遍历数组即可完成操作。

复杂度

时间复杂度:

  • 遍历数组的时间复杂度为O(n),其中n是数组的长度。
  • 第一个循环中的每个操作都是O(1)的时间复杂度,总体时间复杂度为O(n)。

空间复杂度:

  • 函数中使用了一个额外的非零指针 non_zero_pointer,以及一个循环中的临时变量 i,它们都是O(1)的空间复杂度。
  • 总体空间复杂度为O(1)。

代码

解法一:

class Solution(object):
    def moveZeroes(self, nums):
        non_zero_pointer = 0

        for i in range(len(nums)):
            if nums[i] != 0:
                nums[non_zero_pointer] = nums[i]
                non_zero_pointer += 1

        for i in range(non_zero_pointer,len(nums)):
            nums[i] = 0

解法二:文章来源地址https://www.toymoban.com/news/detail-836249.html

class Solution(object):
    def moveZeroes(self, nums):
        non_zero_pointer = 0

        for i in range(len(nums)):
            if nums[i] != 0:
                nums[non_zero_pointer], nums[i] = nums[i] ,nums[non_zero_pointer]
                non_zero_pointer += 1

到了这里,关于力扣代码学习日记五的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 程序员技能与成长:如何学习新的编程语言和代码规范与单元测试

    一名软件工程师的最大挑战就是使自己的技术栈跟得上技术的发展,而在这个技术飞速发展的时代,保证自己不被淘汰的唯一方法就是不断学习。 那么,程序员需要掌握多门编程语言吗?很多初学者都被这个问题所困扰。Google研究总监 Peter Norvig曾就这个问题给出自己的观点

    2024年04月10日
    浏览(47)
  • 【华为OD机试真题 Python语言】448、结对编程 | 机试真题+思路参考+代码解析(C卷)

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习 🎃题目描述

    2024年02月04日
    浏览(48)
  • 简单编程代码表白c语言,简单编程代码入门图标

    大家好,给大家分享一下简单编程代码表白手机版,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 大家好,本文将围绕python程序编程代码大全展开说明,python编程游戏代码是一个很多人都想弄明白的事情,想搞清楚python代码大全简单需要先了解以下几个事

    2024年02月04日
    浏览(47)
  • Go语言——【高质量编程 | 代码规范】

    作者 :非妃是公主 专栏 :《Golang》 博客主页 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 高质量编程,就是指编写的代码能够达到正确可靠的同时,具备简洁清晰、结构明了等特点,可以让团队成员很快的上手。具体来说,有

    2024年02月01日
    浏览(100)
  • Python编程语言简介

    Python 是荷兰人 Guido van Rossum (吉多·范罗苏姆,中国程序员称其为“龟叔”)在 1990 年初开发的一种解释型编程语言。 Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间而开发的,之所以会选择 Python 作为该编程语言的名字,是因

    2024年02月07日
    浏览(54)
  • 编程语言与Python介绍

    计算机存储数据格式 原理: 计算机的工作需要基于电,而电信号只有高低电频两种状态。将高低电频命名为0和1(也就意味着计算机只识别0和1的二进制数)所以计算机才能识别诸多信息,原因是使用了二进制数进行排列组合 存储单位: 二进制数使用比特位(bit)表示:一

    2024年02月04日
    浏览(48)
  • 极语言中文编程_学习笔记

    更多有关极语言中文编程的信息请看文件夹下的sec.htm或者官网的编程说明书 http://sec.yihuolao.com/sec.htm 。 极语言的官方网址是: http://sec.yihuolao.com/ http://sec.z5x.cn/ http://www.z5x.cn/ 极语言入门教学视频:https://www.ixigua.com/7128748847265743371 极语言游戏教学视频:https://www.ixigua.com/712

    2024年02月05日
    浏览(50)
  • 最喜爱的编程语言——Python

            编程语言(programming language)可以简单的理解为一种计算机和人都能识别的语言。一种能够让程序员准确地定义计算机所需数据的计算机语言,并精确地定义在不同情况下所应当采取的行动。        编程语言处在不断的发展和变化中,从最初的机器语言发展到如今

    2024年02月09日
    浏览(53)
  • 一文了解Python编程语言及安装

    目录 🍒初识Python 🍒什么是编程语言 🍒安装python(windows) 🍒安装python(Linux)     🦐博客主页:大虾好吃吗的博客     🦐专栏地址:Python从入门到精通专栏 人生苦短,我用python          Python是一种高级编程语言,由荷兰人Guido van Rossum于1989年创造。 Python是一种高

    2024年02月11日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包