leetcode:移动零

news2024/10/6 2:20:35

移动零

easy

给定一个数组 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:操作次数多,效率非常低

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for i, num in enumerate(nums):
            
            if num == 0:
                nums.remove(0)
                nums.append(0)
                
        return nums

法2:双指针(效率高)

演示:

  1. 步骤一:
image-20230706204447113 image-20230706204526249 image-20230706204547504
  1. 步骤二
image-20230706204709591
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = j = 0#设置双指针
        
        #步骤一
#i遍历数组,j指向为0的下标,当nums[i]不为0时,将nums[i]的值替换到nums[j],然后j向后移动一位
        while i < len(nums):
            if nums[i] != 0:
                nums[j] = nums[i]
                j += 1
            i += 1
		#步骤二
#步骤一已经将所有非0数移到前面去了,现在j在最后一个非0数之后,将j到结尾的数全部赋值为0
        while j < len(nums):
            nums[j] = 0 
            j += 1
        
        return nums

我们创建两个指针 i 和 j,第一次遍历的时候指针 j 用来记录当前有多少 非0 元素。即遍历的时候每遇到一个 非0 元素就将其往数组左边挪,第一次遍历完后,j 指针的下标就指向了最后一个 非0 元素下标。
第二次遍历的时候,起始位置就从 j 开始到结束,将剩下的这段区域内的元素全部置为 0。

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

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

相关文章

回归预测 | MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入单输出

回归预测 | MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入单输出 目录 回归预测 | MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入单输出预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入…

如何用深度强化学习自动炒股

初衷 最近一段时间&#xff0c;受到新冠疫情的影响&#xff0c;股市接连下跌&#xff0c;作为一棵小白菜兼小韭菜&#xff0c;竟然产生了抄底的大胆想法&#xff0c;拿出仅存的一点私房钱梭哈了一把。 第二天&#xff0c;暴跌&#xff0c;俺加仓 第三天&#xff0c;又跌&…

【PCL】(二)CMake编译

&#xff08;二&#xff09;CMake编译 将以下代码写到pcd_write.cpp中&#xff0c;并放到项目/PATH/TO/MY/GRAND/PROJECT/project中。 #include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>intmain (){pcl::PointCloud<pcl::Poin…

黑马头条 作业+解答 day03-自媒体文章发布 自媒体接口

感觉是非常适合新手的练手接口&#xff1b;花了不到半小时吧&#xff0c;主要是因为接口描述很清晰&#xff01; 建议大家仔细自己做了一遍再对照&#xff0c;有更好的写法欢迎留言&#xff01; 1)素材管理 1.1)图片删除 接口描述 说明接口路径/api/v1/material/del_picture/{i…

分布式事务 微服务事务方案和实现 Java分布式事务架构知识点

文章目录 什么是分布式事务分布式的理论的角度看分布式事务的体系刚性事务&#xff1a;柔性事务&#xff1a;两段提交&#xff08;2PC&#xff09;两段提交&#xff08;2PC - Prepare & Commit&#xff09;是指两个阶段的提交&#xff1a;两段提交&#xff08;2PC&#xff…

这些ai自动生成图片软件你值得拥有

小明是一名设计师&#xff0c;最近他接到了一份海报设计的任务。但是&#xff0c;他却发现自己的设计能力有些瓶颈&#xff0c;无法满足客户的需求。就在他苦恼之时&#xff0c;他的朋友小王向他建议了了几款趁手的ai绘画工具&#xff0c;可以帮助它快速绘制出美轮美奂的图片。…

什么是 AOP?对于 Spring IoC 和 AOP 的理解?

什么是 AOP&#xff1f; AOP(Aspect-Oriented Programming)&#xff0c;即 面向切面编程&#xff0c; 它与OOP( ObjectOriented Programming, 面向对象编程) 相辅相成&#xff0c;提供了与OOP 不同的抽象软件结构的视角 在 OOP 中, 我们以类(class)作为我们的基本单元 而 A…

微服务网关SpringCloudGateway实战

目录 微服务网关SpringCloudGateway 1.概述 2.核心概念 快速入门 1.微服务开发 2.网关配置创建一个Gateway服务&#xff0c;引入以下依赖&#xff1a; 微服务网关SpringCloudGateway 1.概述 Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project R…

K8S集群安全升级(CIS CNI Calico)

集群安全升级 1 集群安全升级1.1 环境安全1.1.1 CIS基础1.1.2 测试工具1.1.3 组件测试1.1.4 定制测试1.1.5 测试镜像 1.2 网络安全1.2.1 CNI方案1.2.2 Calico环境1.2.3 Calico部署1.2.4 简单实践1.2.5 BGP实践1.2.6 策略实践1.2.7 流量管控1.2.8 基准测试 1 集群安全升级 1.1 …

怎样成为平面设计师?一文带你快速了解

成为一名优秀的平面设计师需要具备一定的条件和能力&#xff0c;同时也需要与行业的发展趋势保持密切的联系。本文将深入探讨成为一名优秀的平面设计师所需的条件&#xff0c;帮助你成为一名优秀的平面设计师。 1、掌握平面设计工具 是否能熟练掌握设计工具和软件是成为优秀平…

物理层概述(一)

物理层基本概念 在计算机网络中&#xff0c;用来连接计算机的媒体大概可以分为两种&#xff1a; 1.导引型传输媒体 双绞线&#xff0c;同轴电缆&#xff0c;光纤 2.非导引型传输媒体 微波通信&#xff08;2~40GHz&#xff09; 物理层协议的主要任务&#xff1…

C++核心编程之引用的使用与介绍

目录 一、引用的基本语法 引用介绍 引用说明 二、引用的注意事项 三、引用做函数参数 四、引用做函数的返回值 五、引用的本质 六、常量引用 一、引用的基本语法 引用介绍 C是C语言的继承&#xff0c;它可进行过程化程序设计&#xff0c;又可以进行以抽象数据类型为特…

(Docker) Compose Plugin For OMV6

omv6:omv6_plugins:docker_compose [omv-extras.org] Summary概述 Docker is a technology that enables the creation and use of Linux containers. A container is a closed environment where one or more applications and their dependencies are installed, grouped and…

浏览器种输入一个url到显示页面全过程

所谓的‘三颗树’ 在浏览器中&#xff0c;当解析和加载网页时&#xff0c;会形成三个重要的树结构&#xff1a;DOM树、CSSOM树和渲染树&#xff08;Render Tree&#xff09;。这些树结构在网页的渲染和布局过程中起到关键作用。 DOM树&#xff08;Document Object Model Tree&…

亿发软件:释放智能仓储的力量,WMS智能仓储管理系统提升动态储存

在仓储管理领域&#xff0c;智能仓储的概念已经成为游戏规则的改变者。借助信息化、物联网和机电一体化的力量&#xff0c;智能仓库正在给行业带来变化。这些先进设施显著增加了仓储管理能力。在本文中&#xff0c;我们将探讨智能仓库的关键优势&#xff0c;了解采用WMS智能仓储…

【文生图系列】文生图大模型合集与效果对比

文章目录 DELL EDELL E 1DELL E 2 ERNIE-ViLGERNIE-ViLG 1ERNIE-ViLG 2Paddlehub ImagenMidjourneyStable DiffusionAltDiffusioneDiff-I阿里通义 DELL E DALLE到目前为止有两个版本&#xff0c;2021年1月&#xff0c;OpenAI发布了DALLE&#xff1b;2022年,DALLE 迎来了升…

Jersey框架学习

一、入门 controller package com.itheima.controller;import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;Path("/person") public class PersonResource {GETProduces(MediaType.TEXT_PLAIN)pub…

【微笑女王-InsCode Stable Diffusion 美图活动一期】

文章目录 一、 Stable Diffusion 模型在线使用地址二、模型相关版本和参数配置三、图片生成提示词与反向提示词四、种子及对应图片 一、 Stable Diffusion 模型在线使用地址 https://inscode.csdn.net/inscode/Stable-Diffusion 操作步骤&#xff1a; 点击Stable Diffusion …

数据结构进阶(一):AVL树

所谓的AVL树也叫做高度平衡的二叉搜索树。 啥是高度平衡的二叉搜索树&#xff1f; 高度平衡的二叉搜索树&#xff1a;意味着左右子树的高度最大不超过一。 我们先来回顾一下二叉搜索树的概念&#xff1a; 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c…

Git 分支详解

一、分支概念介绍 1. 主分支&#xff08;主干/主线/main/master&#xff09; 包含所有最终修改的历史&#xff0c;反映项目的最终版本。 建议不要乱动主干&#xff0c;如果你编辑了一个小组项目的主干分支&#xff0c;你的改动会影响到其他人&#xff0c;而且很快就会出现合并…