【每日一题】【LeetCode】【第十三天】移动零

news2025/1/10 22:23:53

解决之路= =

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

看到这题目,第一时间还真想到了双指针法(暴力解法是个会写代码的都能第一时间想到,所以自己学会了尽量不第一时间用暴力解法)

right的初始位置元素若为0,那么right--left如果是零,那就与right互换位置,然后left++, right--

class Solution(object):
    def moveZeroes(self, nums):
        n = len(nums)
        left = 0
        right = n-1
        while left < right:
            if nums[right] == 0:
                right -= 1
            if nums[left] == 0:
                temp = nums[left]
                nums[left] = nums[right]
                nums[right] = temp
                right -= 1
            left += 1

测试,不正确。看看题目,要求了保持非零序列的相对位置。自己的代码会导致乱序的。

在这里插入图片描述

第二次

关于这个乱序,自己学习排序算法时倒是有过类似内容,即是排序的稳定性。比如稳定的排序算法有插入排序、冒泡排序、归并排序、基数排序等。我们只需要把排序的规则改一改,改成和判断0有关的即可。

按照这个思路,基数排序不太合适,插入排序、冒泡排序时间复杂度O(n2)暂不考虑。可能归并可以试试。

但自己又突然想到了一个办法。找到0并不是只能交换处理,还可以删除,然后计数,在最后把0统一加上就好。

class Solution(object):
    def moveZeroes(self, nums):
        count = 0
        while 0 in nums:
            nums.remove(0)
            count += 1

        for i in range(count):
            nums += [0]

测试正确,提交成功。

在这里插入图片描述

第三次

不过时间上还是有点慢的,看了下代码,好像可以优化一下,改一下代码。

class Solution(object):
    def moveZeroes(self, nums):
        res = []
        while 0 in nums:
            nums.remove(0)
            res.append(0)
        nums += res

改变不大

在这里插入图片描述

第四次

看看评论区怎么写的。

woc,看到一个好屌的代码。

在这里插入图片描述

学到了,排序原来还可以对bool对象进行排序,只会判断是True还是False,数值具体是几都不管,相对位置也不会改变。

eg:[1, 0, 12, 3, 0]按照bool来排序,得到的就是[0, 0, 1, 12, 3],1、12、3这三个为True的数值之间的相对位置不会发生改变。

然后设置升序还是降序,就可以控制0在列表前,还是0在列表后。

提交结果快的很,牛!

在这里插入图片描述

附件

在这里插入图片描述

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

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

相关文章

Jenkins-Slave分布式架构搭建

♥ Jenkins的分布式构建&#xff0c;在Jenkins的配置中叫做节点&#xff0c;分布式构建能够让同一套代码或项目在不同的环境(如&#xff1a;Windows和Linux系统)中编译、部署等。 ♥ 将jenkins项目发布在不同服务器上&#xff08;分布jenkins工作空间&#xff0c;部署项目到不同…

java 简单了解spring之(IOC容器)

IOC 容器 是spring的一个重要组成部分 IOC 翻译过来叫控制反转 他在做的事是 降低计算机代码的耦合度 这个过程叫IOC 通过控制反转 对象在被创建时 由一个调控系统内所有对象的外界实体将将其所依赖的对象引用传递给他&#xff0c;也可以说&#xff0c;依赖被注入到对象中 说简…

[oeasy]python0048_取整_int_float_浮点型_cast_扮演_tab_制表键_制表符

转化为10进制 回忆上次内容 上次 把其他进制 转化回 十进制 用的是 int 函数 int 来自于 integer 同源词 还有 integrateentire意思都是完整的 完整的 和 零散的 相对 可以把 零散的小数 转化为 完整的整数吗&#xff1f;&#x1f914; 取整 可以 把一个浮点型的小数 取…

【Proteus仿真】【51单片机】酒精浓度检测系统设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602显示模块、按键模块、LED和蜂鸣器、MQ-3酒精传感器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示酒精浓度值和阈值&…

【自学Docker】Docker命令

Docker命令 Docker命令分类 Docker环境信息 docker [info|version]Docker容器生命周期管理 docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]Docker容器操作运维 docker [ps|inspect|top|attach|wait|export|port|rename|stats]Docker容器rootfs命令 …

AMBA--AHB总线协议学习及Verilog实现与仿真(一)

1、AHB总线概述 AHB&#xff1a;Advanced High-performance Bus,即高级高性能总线。AHB总线是SOC芯片中应用最为广泛的片上总线。下图是一个典型的基于AMBA AHB总线的微控制器系统&#xff1a; 基于AMBA AHB的设计中可以包含一个或多个总线主机&#xff0c;通常一个系统里至少…

MySQL——如何正确的显示随机消息

在之前的文章中有介绍order by语句的几种执行模式。考虑如下场景&#xff1a;有一个APP&#xff0c;有一个随机显示英语单词的功能&#xff0c;也就是根据每个用户的级别有一个单词表&#xff0c;然后这个用户每次访问首页的时候&#xff0c;都会随机滚动显示三个单词。会发现随…

PhotoZoom2023专业的图片无损放大软件最新V8版功能介绍

PhotoZoom 8 全新版本 震撼来袭。 一款划时代的、技术上产生革命性影响的数码图片放大工具。 我们获取图片的方法&#xff0c;一般是从度娘图片和各个图库里找素材。但一般网上搜索到的很多图片像素都非常小&#xff0c;普通方法放大就像打了马赛克一样&#xff0c;根本没法直接…

基于STM32的室内环境监测系统、基于STM32的智能家居系统

程序源码无删减 整个开发用到的所有资料如下&#xff1a; 开发软件MDK JLINK驱动安装包及相关文件 stm32开发资料-stm32f103c8t6 PCtoLCD2002 取模软件 stm32配套的液晶屏资料以及相关程序 Stm32f103c8t6 UCOSII 各传感器的数据手册以及程序、BMP180、DHT11温度模块、HC-SR04 …

EthernetOnTCP--基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道

在上一篇文章中&#xff0c;我们使用PCAP建立了本地的软件集线器&#xff08;Hub&#xff09;。考虑到较远距离的跨车间调试&#xff0c;有必要使用Tcp连接构造一个以太网的隧道&#xff0c;使得两个车间之间的调试设备可以虚拟的连接在一个Hub上。当然&#xff0c;我们可以使用…

【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)

文章目录前言1. Arbotix使用流程1.1 安装 Arbotix1.2 创建新功能包&#xff0c;准备机器人 urdf、xacro 文件1.3 添加 Arbotix 配置文件1.4 编写 launch 文件配置 Arbotix1.5 启动 launch 文件并控制机器人模型运动2. URDF集成Gazebo2.1 URDF与Gazebo基本集成流程2.2 URDF集成G…

Spring Boot整合Redis(gradle + gson + lombok + redisTemplate)

本文创建了gradle项目&#xff0c;用来整合Spring Boot和Redis&#xff0c;用到了gradle gson lombok redisTemplate等技术。 重要文件&#xff1a; 文件名说明build.gradlegradle配置文件Redis2Application.java启动类Controller.java控制器类StudentService.java业务逻辑…

深入解析Linux虚拟化KVM-Qemu分析之virtio设备

说明&#xff1a; KVM版本&#xff1a;5.9.1QEMU版本&#xff1a;5.0.0工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 先来张图&#xff1a; 图中罗列了四个关键模块&#xff1a;Virtio Device、Virtio Driver、Virtqueue、Notification&#xff08;eventfd…

Linux——简单了解文件与目录结构

1、 Linux 文件 1.1 概述 Linux系统 一切皆文件。 从我们刚接触到Linux系统&#xff0c;就能听到这句话&#xff1a;Linux系统 一切皆文件。 我们来看看Linux文件系统和Windos的差异&#xff1a; Windows &#xff0c;我们知道一台新的电脑到手之后&#xff0c;往往都只有一…

Vue2的双向绑定真的就是观察者模式吗?

导语建议先看看往期的推文&#xff0c;对vue响应式有一定理解后再阅读本文。Vue的双向绑定&#xff08;数据劫持&#xff09;响应式与观察者模式&#xff08;特别是附录&#xff0c;观察者模式与发布订阅模式&#xff09;关于Vue2深入响应式原理&#xff0c;作者原话为&#xf…

搭建nacos环境(保姆级教程)

2.2.1 服务发现中心 根据上节讲解的网关的架构图&#xff0c;要使用网关首先搭建Nacos。 首先搭建Nacos服务发现中心。 在搭建Nacos服务发现中心之前需要搞清楚两个概念&#xff1a;namespace和group namespace&#xff1a;用于区分环境、比如&#xff1a;开发环境、测试环…

【Linux】进程间管道通信、线程池

目录 一、进程间通信的概念 二、匿名管道 2.1 什么是管道 2.2 管道的实现 2.3 管道的使用 三、进程池 3.1 进程池实现逻辑 3.2 模拟任务表 3.3 进程池的创建 四、命名管道 4.1 创建命名管道 4.2 命令管道的使用 一、进程间通信的概念 进程具有独立性&#xff0c;…

面试系列:单点登录的知识(一)

大家好&#xff0c;我是车辙&#xff0c;由于目前接手的业务涉及到了单点登录&#xff0c;所以一直在疯狂的去补充这方面的知识。也写下了这篇面试形式的文章&#xff0c;写的不好大家轻点 Diss。 面试开始 在焦急的等待中&#xff0c;一位看上去比较年轻的小伙子走了过来。我…

Leetcode:701. 二叉搜索树中的插入操作(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 递归&#xff1a; 原理思路&#xff1a; 迭代&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二…

Codeforces Round #843 (Div. 2)——A,B,C,E

​​​​​​​​​​​Dashboard - Codeforces Round #842 (Div. 2) - Codeforces A: 思维构造 题意&#xff1a;给定一个由 ab 组成的字符串&#xff0c;将该字符串拆分成 3 个部分&#xff08;a&#xff0c;b&#xff0c;c&#xff09;&#xff0c;要求中间部分的字典序最大…