leetcode283移动零

题目:

给定一个数组 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:

设置双指针i,j。i遍历,j指向非零元素。i遇到非零元素就把它挪到j所在位置,同时j后移一位。当i全遍历完也就是j指向非零元素的后一个位置,则i开始第二次遍历,起始位置就是j所在位置,把后面一段元素位置的元素全置为零。时间复杂度为O(n)。其实是i遍历了一遍,j近似也遍历了一遍。

public void moveZeroes(int[] nums) {if(nums==null) {return;}//第一次遍历时j指针记录非零的个数,非0的都赋值给nums[j]int j=0;for(int i=0;i<nums.length;i++){if(nums[i]!=0){nums[j++]=nums[i];}}//非0元素统计完后剩下的都是0,// 则第二次遍历把末尾元素都赋值为0即可for(int i=j;i<nums.length;i++){nums[i]=0;}}

解法2:

官方题解。设置双指针,但不是采取挪动方式,而是用交换的方式,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。则每次交换都是将左指针的零与右指针的非零数交换且非零数的相对位置未改变。

这样只用遍历一遍。但是这样的效率比挪动更低。

public void moveZeroes(int[] nums) {int n = nums.length, left = 0, right = 0;while (right < n) {if (nums[right] != 0) {swap(nums, left, right);left++;}right++;}}public void swap(int[] nums, int left, int right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;
}

加油加油^_^

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

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

相关文章

MybatisPlus多表关联分页查询

Mybatis-plus是一个Mybatis的增强工具,提供了许多功能强大的API,其中包括分页查询和多表关联查询。在Mybatis-plus中,连表查询可以使用LambdaQueryWrapper或QueryWrapper加入多个表进行查询,然后再使用IPage进行分页。 IPage<Map<String, Object>> page = new…

规避【虚拟专线技术】使用风险实现业务系统安全

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 一、技战法描述 VPN是利用Internet等公共网络基础设施&#xff0c;通过隧道加密通信技 术&#xff0c;为用…

Jtti:Ubuntu18.04如何修改远程ssh端口号

要在Ubuntu 18.04上修改SSH的远程端口号&#xff0c;您需要编辑SSH服务器配置文件并指定新的端口号。以下是具体的步骤&#xff1a; 以root或具有sudo权限的用户登录到您的Ubuntu服务器。 备份SSH配置文件&#xff08;可选&#xff09;&#xff1a; 在进行任何更改之前&…

Hive UDF、UDAF和UDTF函数详解

在 Hive 中,可以编写和使用不同类型的自定义函数,包括 UDF(User-Defined Functions)、UDAF(User-Defined Aggregate Functions)和 UDTF(User-Defined Table Functions)。这些自定义函数允许你扩展 Hive 的功能,以执行自定义的数据处理操作。 UDF(User-Defined Functi…

QT实现TCP通信(服务器与客户端搭建)

一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象&#xff0c;该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态&#xff0c;监听时&#xff0c;可以监听指定的ip地址&#xff0c;也可以监听所有主机地址&#xff0c;可以通过指定端口号&#x…

pdf用什么软件打开?介绍几种常用打开方法

pdf用什么软件打开&#xff1f;PDF是一种广泛使用的文件格式&#xff0c;由于其跨平台和易于共享的特点&#xff0c;它已成为许多人在日常工作和学习中使用的首选文件格式。但是&#xff0c;有时候我们可能会遇到一些问题&#xff0c;比如不知道用什么软件打开PDF文件&#xff…

【系统编程】线程池以及API接口简介

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

数据结构与算法-插入希尔归并

一&#xff1a;排序引入 我们通常从哪几个方面来分析一个排序算法&#xff1f; 1.时间效率&#xff1a;决定了算法运行多久&#xff0c;O&#xff08;1&#xff09; 2.空间复杂度&#xff1a; 3.比较次数&交换次数:排序肯定会牵涉到两个操作&#xff0c;一个比较是肯定的。…

14 | Spark SQL 的 DataFrame API 读取CSV 操作

sales.csv 内容 date,category,product,full_name,sales 2023-01-01,Electronics,Laptop,John Smith,1200.0 2023-01-02,Electronics,Smartphone,Jane Doe,800.0 2023-01-03,Books,Novel,Michael Johnson,15.0 2023-01-04,Electronics,Tablet,Emily Wilson,450.0 2023-01-05,B…

《存储IO路径》专题:块设备层多队列blk-mq架构

我们想象一下&#xff0c;你是一个餐厅的厨师&#xff0c;你要准备很多不同的菜肴&#xff0c;而每种菜肴需要不同的食材和烹饪时间。如果每道菜都按照需要的顺序来准备&#xff0c;那么你的工作效率一定会非常低。为了提高效率&#xff0c;你会怎么做呢&#xff1f; 在linux架…

uni-app 之 v-on:click点击事件

uni-app 之 v-on:click点击事件 image.png <template><!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--><view>--- v-on:click点击事件 ---<view v-on:click"onclick">{{title}}<…

Git 回顾小结

Git是一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;版主开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高校合并代码内容 Git常用命令 命令作用注意git -v查看Git版本git init初始化本地Git仓库git add 文件…

澳门服务器有哪些特点

澳门服务器是指位于澳门的服务器,具有以下特点: 地理位置优越:澳门位于珠江口西侧,靠近香港,是中国内地与香港、澳门地区重要的交通枢纽。澳门服务器因此在访问速度和延迟方面表现出色。 稳定的网络连接:澳门拥有完善的网络基础设施,包括高速稳定的互联网连接和先进的通信技术…

数据仓库的流程

数据仓库完全用统计分析框架实现:Spark,MR 但是因为实际生产环境中,需求量非常大, 如果每个需求都采用独立c代码开发方式,重复计算会很多. 提高性能的方法: 1.减少数据量 2. 减少重复计算 例如RDD cache 可以减少重复计算,但是不安全,都在缓存中, persist 都放内存中,但是慢 而…

drf之请求、drf之响应、两个视图基类、5个视图扩展类(不是视图类)、原生django,怎么写向响应头写入数据

1 drf之请求 1.1 drf 之请求Request类 # 新的request对象---》之前聊过一部分# from rest_framework.request import Request# 1 以后视图类的方法中的request都是这个类的对象 # 2 以后使用request.data 取请求体中的数据 # 3 以后使用request.query_params 取请参数中的数…

python提取邮件的附件,以excel为例

配置邮箱、读取基本的邮件内容请参考&#xff1a;python读取并解析邮箱邮件&#xff0c;读取邮件主题、内容、时间 以excel为例&#xff1a; 获取邮件&#xff1a; email_value_config {imap_server: imap.exmail.qq.com, username: xxxxxxxx.com, password: xxxxx, }# 连接…

QTday5

一、客户端 二、服务器 三、配置图像处理环境 四、XMind思维导图

vscode新建vue3文件模板

输入快捷新建的名字 enter 确认后在文件中输入以下内容 {// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and// description. The prefix is what is used to trigger the snippet and the body will be expand…

webpack5 (四)

react-cli 中配置 开发环境 const path require(path) const EslintWebpackPlugin require(eslint-webpack-plugin) const HtmlWebpackPlugin require(html-webpack-plugin) const ReactRefreshWebpackPlugin require(pmmmwh/react-refresh-webpack-plugin); //封装处理样…

Django REST framework中的序列化Serializers

序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数据类型&#xff0c;然后可以将它们轻松地呈现为 JSON&#xff0c;XML 或其他内容类型。序列化器还提供反序列化&#xff0c;在首次验证传入数据之后&#xff0c;可以将解析的数据转换回复杂类型。 简单来…