LC打怪录 283. moving zero

题目链接 力扣

class Solution:def moveZeroes(self, nums: List[int]) -> None:l=0for r in range(len(nums)):if nums[r]:nums[l], nums[r] = nums[r], nums[l]l += 1return nums

方法一:

思路

双指针

1. def moveZeroes(self, nums: List[int]) -> None: 定义了一个名为moveZeroes的方法,该方法接受一个名为nums的整数列表作为参数。该方法的返回类型被指定为None,意味着这个方法不会返回任何值,而是直接在输入的nums列表上进行修改。

2. l=0 初始化一个名为l的变量,作为左指针(或“慢”指针),用于跟踪最近的非零元素应该被放置的位置。for r in range(len(nums)): 使用一个名为r的变量(右指针或“快”指针)遍历nums列表的所有索引。

3. if nums[r]: 检查当前r指向的元素是否非零。如果是非零元素,执行以下操作:

a. nums[l], nums[r] = nums[r], nums[l] 交换lr指向的元素。这实际上将非零元素移动到数组的前面,同时保持它们原有的相对顺序。

b. l += 1l(左指针)向右移动一位,因为我们刚刚在l的位置放置了一个非零元素,所以下一个可能的非零元素的位置应该是l + 1

4. return nums 虽然方法的返回类型被指定为None,但这里返回了修改后的nums列表。这不是必须的,因为nums列表是在原地被修改的,但这样做可以在测试或调试时方便查看方法的效果。

时间复杂度为:O(n)

方法2:

Bubble Sort

那怎么知道有序呢?其实很简单,就是第二层 for 循环的时候,没有交换的元素。

所以呢,这里就增加一个 flag 数组,如果第二层循环没有交换元素的时候,证明数组已经排序好了,不需要再继续遍历,直接返回就好了。


def bubbleSort(nums):# 数组长度n = len(nums)# 遍历数组中的元素(n 次冒泡操作)for i in range(n):# 标志位,检查是否发生元素交换flag = False# 每次冒泡操作中比较每个元素for j in range(n - i - 1):# 比较相邻元素大小(升序)if nums[j] > nums[j + 1]:# 如果左边大于右边,就交换顺序nums[j], nums[j + 1] = nums[j + 1], nums[j]# 如果发生交换,证明还不是有序,继续遍历flag = True# 如果不发生交换,证明数组已经有序,直接跳出循环        if not flag:break# 返回数组            return nums

实现逻辑

  • 新代码通过比较相邻元素并在发现0时将其向后交换,逐步将0移动到数组的末端。这个过程在每一轮循环中都会重复,直到所有的0都被移动到末尾。
  • 之前的方法通过使用两个指针(一个快指针和一个慢指针)来避免不必要的比较和交换。当快指针指向的元素非0时,它会与慢指针指向的元素交换位置,然后慢指针前进一位。这样可以保证所有非0元素都被移动到数组的前面,而0则自然被留在了后面。

时间复杂度:O(n2)

  • 新代码的时间复杂度是O(n2),这是因为它使用了两层嵌套循环来遍历数组。对于每一个元素,它都会与其后面的元素进行比较并可能交换,这导致了较高的运算次数,特别是当数组较大时。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/715849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 3正式发布,旨在巩固其在AI图像领域相对于Sora和Gemini的领先地位

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

vue3 + vite 项目可以使用纯Js开发吗?

答案:可以 创建项目: 按照链接参考或者按官方: webstorm 创建vue3 vite 项目-CSDN博客 项目目录 tsconfig.json 配置允许js allowJs指定是否编译js文件,在任意文件当中,如果我们模块使用js写的,那么我们需要 将all…

地理空间分析15——Python在应急响应与地理空间分析中的创新应用

目录 写在开头1.Python及其在地理空间分析中的应用地理空间数据处理库地理空间数据可视化工具 2.应急响应中的Python应用实例2.1 灾害风险评估2.2 实时数据分析与响应2.3资源优化分配 3 地震应急响应案例:利用Python进行数据分析3.1 背景介绍3.2 数据收集与处理3.3 …

链式插补 (MICE):弥合不完整数据分析的差距

导 读 数据缺失可能会扭曲结果,降低统计功效,并且在某些情况下,导致估计有偏差,从而破坏从数据中得出的结论的可靠性。 处理缺失数据的传统方法(例如剔除或均值插补)通常会引入自己的偏差或无法充分利用数…

机器学习:模型选择和模型优化

进行数据处理之后,我们得到了x_train和y_train,我们就可以用来进行回归或分类模型训练啦~ 一、模型选择 我们这里可能使用的是回归模型(Regression),值得注意的是,回归和分类不分家。分类是预测离散值&…

策略的更新、加载与同步

C语言的C库提供了策略的更新、加载与同步的方法,这里引入多线程,达到区分读写任务(生产者——消费者 模型)的目的。 示例: /*brief check strategy to update, reload, synchronized to read(stoped by SIGINT)author…

Mysql标量子查询

目录 子查询标量子查询数据准备 子查询 SQL语句中嵌套select语句,称为嵌套查询,又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查询外部的语句可以是insert / update / delete / select 的任何一个&…

git的安装、使用

文章目录 安装gitgit学习网站git初始配置具体配置信息 新建版本库(仓库)git的工作区域和文件状态工作区域文件状态git文件提交的基础指令 git基础指令1. 版本提交2. 分支创建3. 分支切换4. 分支合并(1) git merge(2) git rebase 5. 在git的提交树上移动(…

Ps:锐化工具

锐化工具 Sharpen Tool可用于增强图像局部区域的对比度,从而提高图像的清晰度和细节,特别适用于提升照片的边缘定义和纹理细节。 快捷键:无 ◆ ◆ ◆ 常用操作方法与技巧 1、如果直接在像素图像上使用锐化工具,可尝试使用“渐隐…

怎么优雅地访问ChatGPT

ChatGPT,这颗璀璨的智能结晶,在2022年岁末之际,由OpenAI实验室倾力铸就,犹如夜空中跃动的智慧星辰,点亮了人工智能领域的新纪元。犹如汪洋中的一座灯塔,ChatGPT以其独特的智慧光辉引人注目,然而…

Linux:kubernetes(k8s)node节点加入master主节点(3)

Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)-CSDN博客https://blog.csdn.net/w14768855/article/details/136415575?spm1001.2014.3001.5502 我在上一章部署好了主节点&…

前端打包部署(黑马学习笔记)

我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 1.前端工程打包 2.通过nginx服务器发布前端工程 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的build按钮来完…

从下一代车规MCU厘清存储器的发展(2)

目录 1.概述 2.MCU大厂的选择 2.1 瑞萨自研STT-MRAM 2.2 ST专注PCM 2.3 英飞凌和台积电联手RRAM 2.4 NXP如何计划eNVM 3.小结 1.概述 上篇文章,我们简述了当前主流的存储器技术,现在我们来讲讲各大MCU大厂的技术选择 2.MCU大厂的选择 瑞萨日…

redis的RDB和AOF

Redis是一种高性能的键值对存储系统,它支持多种类型的数据结构,如字符串、列表、集合、哈希表、有序集合等。Redis提供了两种不同的持久化机制来确保数据的安全性:RDB(Redis Database)和AOF(Append Only Fi…

Tomcat布署及优化二-----Mysql和虚拟机

1.Mysql搭Blog 1.1下载安装包 看一下tomcat状态 1.2放到指定目录 cp jpress-v3.2.1.war /usr/local/tomcat/webapps/ cd /usr/local/tomcat/webapps/ 1.3路径优化 ln -s jpress-v3.2.1 jpress 看jpress权限 1.4生成配置文件 cat >/etc/yum.repos.d/mysql.repo <<E…

掘根宝典之C语言指针详解

目录 什么是指针&#xff1f; 与指针相关的运算符 指针类型的意义 指针的大小 初始化 将指针直接指向一个已经存在的变量或内存地址&#xff1a; 使用malloc函数动态分配内存&#xff0c;并将指针指向新分配的内存&#xff1a; 使用calloc函数动态分配内存&#xff0c;并…

Javascript:常量与数据类型

一、前言 介绍完变量之后我们来对常量进行了解一番&#xff0c;关于常量我们需要知道些什么呢&#xff1f; 二、正文 1.常量的基本使用 使用const声明的变量称为常量&#xff0c;当某个变量的字面量无需改动的时候就能够用到常量。 //声明一个常量 const G 9.8 //输出这个常量…

您的计算机已被pings勒索病毒感染?恢复您的数据的方法在这里!

导言&#xff1a; 在数字时代&#xff0c;数据是企业和个人生活中不可或缺的一部分。然而&#xff0c;随着勒索病毒的不断进化和传播&#xff0c;我们的数据面临着前所未有的威胁。其中&#xff0c;.pings 勒索病毒是最新一轮威胁之一&#xff0c;它以其独特的加密算法和无情的…

leetcode-字符串中的单词数

434. 字符串中的单词数 题解&#xff1a; 这个问题可以通过遍历字符串&#xff0c;当遇到非空格字符时&#xff0c;判断其前一个字符是否为空格&#xff0c;如果是&#xff0c;则说明这是一个新的单词的开始&#xff0c;计数器加一。最后返回计数器的值即可。 class Solutio…

【Redis | 第一篇】快速了解Redis

文章目录 1.快速了解Redis1.1简介1.2与其他key-value存储的不同处1.3Redis安装——Windows环境1.3.1下载redis1.3.2启动redis1.3.3进入redis客户端1.3.4修改配置 1.4Redis安装——Linux环境1.4.1安装命令1.4.2启动redis1.4.3进入redis客户端 1.5配置修改1.6小结 1.快速了解Redi…