每日一题:LeetCode-283. 移动零

每日一题系列(day 08)

前言:

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈

   🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉算法👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长的道路🏇🏇,我们要做的,就是斩妖除魔💥💥,打怪升级!💪💪当然切记不可😈走火入魔😈,每日打怪,拾取经验,终能成圣🙏🙏!开启我们今天的斩妖之旅吧!✈️✈️


题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例:

在这里插入图片描述

提示:

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

思路:

  这题其实很简单,题目要求我们在不改变原有数组的顺序下将零元素全部移动到数组的最右侧。我把这类题目称为划分数组的题目,而解决这类将数组划分为几个区域的问题,我们经常会使用双指针算法。
  首先题目给我们一个数组,让我们最终得到的结果被划分成两个区间,一个是元素为0的区间,一个是元素不为0的区间。但是这是将数组最终得到的结果,在我们没划分完的时候我们其实可以分为三个区间:

  首先我们先设置一个指针cur用来遍历这个数组,一个指针dest表示已处理的非零元素的最后一个位置。在cur走完之前其实可以分为三个区间:

在这里插入图片描述

  当cur走完之后就只剩下两个区间:

在这里插入图片描述

  开始,dest指向-1,cur从0开始往后遍历,只要遇到不是0元素就先将dest+1(因为开始指向-1,所以每次交换前要先+1)在交换这两个值,到cur指向n的时候遍历结束,我们就得到了目标结果。
  其实这个过程仔细观察,我们会发现其实这个过程和我们的快排很类似,快排是选取一个基准值将小于基准值的放左区间,大于基准值的放右区间。对于这题来说,基准值就是0。只不过大于0的在左边而已。

代码实现:

class Solution {
public:void moveZeroes(vector<int>& nums) {int cur = 0;int dest = -1;//首先指向-1while(cur != nums.size())//cur不超过数组下标范围就循环{if(nums[cur])//不为0就交换{swap(nums[++dest], nums[cur]);//别忘记++dest}++cur;//最后cur向后走一步}}
};

  双指针问题在数组划分类似的问题中非常常见,双指针并不一定是C语言语法中的指针,可以是数组下标,或者某个索引等…

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

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

相关文章

聚观早报 |亚马逊AWS发布新AI芯片;拼多多Q3营收增长94%

【聚观365】11月30日消息 亚马逊AWS发布新AI芯片 拼多多Q3营收增长94% Redmi K70全新国风配色揭晓 英伟达扩大自动驾驶中国团队 华为nova 12参数细节曝光 亚马逊AWS发布新AI芯片 在美国时间周二举办的Reinvent大会上&#xff0c;亚马逊旗下的云计算部门AWS发布了新的人工…

Docker—更新应用程序

在本部分中&#xff0c;你将更新应用程序和映像。您还将了解如何停止和移除容器。 一、更新源代码 在以下步骤中&#xff0c;当您没有任何待办事项列表项时&#xff0c;您将把“空文本”更改为“您还没有待办事项&#xff01;在上面添加一个&#xff01;” 1、在src/static/…

C#,数值计算——插值和外推,径向基函数插值(RBF_multiquadric)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class RBF_multiquadric : RBF_fn { private double r02 { get; set; } public RBF_multiquadric(double scale 1.0) { this.r02 Globals.SQR(scale); } publi…

uniapp android播放本地视频

概述 本文将介绍如何在uniapp开发中实现Android平台播放本地视频的功能。首先我们会梳理整个实现过程的流程,并使用表格列出每个步骤需要做的事情。然后,我们会逐步解释每个步骤需要做的事情,并提供相关的代码示例。 流程概览 下面的表格展示了实现uniapp Android播放本地…

【ASP.NET Core】MVC中ViewData和ViewBag的区别和使用

在 ASP.NET MVC 中&#xff0c;ViewBag 和 ViewData 都是用来传递数据从控制器到视图的机制。尽管它们在功能上很相似&#xff0c;但在使用方式上有一些差别。 ViewBag ViewBag 使用动态特性来存储数据。它是 dynamic 类型的&#xff0c;这意味着你可以给它赋任何类型的值。由…

开源 vs 闭源:数字化时代的技术选择

开源 vs 闭源&#xff1a;数字化时代的技术选择 近期&#xff0c;特斯拉CEO马斯克的一番言论引起了广泛关注&#xff1a;OpenAI不该闭源&#xff0c;自家首款聊天机器人将开源。这引发了人们对于开源与闭源软件的辩论&#xff0c;这一话题在技术界一直是热门的讨论焦点。在数字…

C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词下篇)

一.枚举&#xff08; enum&#xff09; 枚举是 C 语言中的一种基本数据类型&#xff0c;用于定义一组具有离散值的常量&#xff0c;它可以让数据更简洁&#xff0c;更易读。枚举类型通常用于为程序中的一组相关的常量取名字&#xff0c;以便于程序的可读性和维护性。定义一个枚…

智能客服核心技术——预测会话与答案生成

1.信息检索 2. 句型模板匹配标准问题生成答案 3.根据知识图谱推理得到答案

vue发送请求携带token,拼接url地址下载文件

封装请求 &#xff0c;该请求为普通的get请求 该请求返回值为&#xff1a; 请求成功之后拼接URL地址下载文件 代码块 downTemplateRequest(activeKeys.value).then((res) > {let url http://47.169.168.99:18888/media/${res.data.name};var elink document.createElemen…

ApiSix的docker 容器化部署及使用

⼀&#xff0e;etcd安装 Docekr安装Etcd 环境准备 此处安装&#xff0c;是利⽤下载的 etcd 源⽂件&#xff0c;利⽤ docker build 构建完整镜像&#xff0c;具体操作如下&#xff1a; 1.环境准备 1.1. 新建⽂件夹 在磁盘某个路径下新建⼀个⽂件夹&#xff0c;⽤处操作 Dockerfi…

LeetCode 设计前中后队列

题目 1670. 设计前中后队列 请你设计一个队列&#xff0c;支持在前&#xff0c;中&#xff0c;后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类&#xff1a; FrontMiddleBack() 初始化队列。void pushFront(int val) 将 val 添加到队列的 最前面 。void pushMidd…

Linux系统平均负载

我们经常会使用 top 命令来查看系统的性能情况&#xff0c;在 top 命令的第一行可以看到 load average 这个数据&#xff0c;如下图所示&#xff1a; load average 包含 3 列&#xff0c;分别表示 1 分钟、5 分钟和 15 分钟的 系统平均负载 系统平均负载&#xff1a; 如果将 …

如何扩展服务器存储容量_Maizyun

如何扩展服务器存储容量 随着互联网和数据的快速发展&#xff0c;服务器存储容量往往成为限制业务发展的重要因素。 如何有效扩展服务器的存储容量以满足业务需求是很多公司和个人需要面对的问题。 本文将探讨如何扩展服务器的存储容量来解决存储空间不足的问题。 1.了解存储…

golang—kafka架构原理快速入门以及自测环境搭建(docker单节点部署)

kafka Apache Kafka 是一个分布式的流处理平台。它具有以下特点&#xff1a; 支持消息的发布和订阅&#xff0c;类似于 RabbtMQ、ActiveMQ 等消息队列支持数据实时处理能保证消息的可靠性投递支持消息的持久化存储&#xff0c;并通过多副本分布式的存储方案来保证消息的容错高…

【华为交换】交换机MSTP+VRRP配置

功能简介 企业用户访问外网的流量&#xff0c;可能会同时包含二层流量和三层流量&#xff08;例如&#xff0c;企业内二层VPN用户和三层VPN用户访问MPLS公网&#xff09;。企业用户希望接入网络既能包含多条接入链路&#xff08;不同链路之间互为备份&#xff09;以保障接入的…

【brpc学习实践十一】session-local与thread-local应用与brpc抽象工厂模式实践

什么是session-local与thread-local 百度内的检索程序大量地使用了thread-local storage (缩写TLS),有些是为了缓存频繁访问的对象以避免反复创建,有些则是为了在全局函数间隐式地传递状态。你应当尽量避免后者,这样的函数难以测试,不设置thread-local变量甚至无法运行。s…

哪些因素会影响香港服务器的下载速度_Maizyun

哪些因素会影响香港服务器的下载速度&#xff1f; 随着互联网的普及和快速发展&#xff0c;越来越多的企业和个人选择使用香港服务器来托管其网站、应用程序和其他在线服务。 然而&#xff0c;很多因素可能会影响香港服务器的下载速度。 本文将探讨影响香港服务器下载速度的几…

Java中xml映射文件是干什么的

Java中的XML映射文件主要用于将Java对象与XML文档之间进行转换。它通常用于处理数据交换和存储&#xff0c;例如将Java对象转换为XML格式以便在网络上传输或保存到文件中&#xff0c;或者将XML文档解析为Java对象以进行处理。这种转换可以通过Java的JAXB&#xff08;Java Archi…

springMVC实验(二)—调式工具APIFOX的使用

【知识要点】 后端开发调试工具 前后端分离已经成为互联网类软件开发主流模式&#xff0c;没有前端操作的支持&#xff0c;如何调试后端程序的就是开发人员必须解决的问题。如&#xff1a;get类请求可以直接使用浏览器就能模拟测试&#xff0c;但是post、put等类型的请求&…

layui 日期选择框弹出后消失

原因是窗口太小&#xff0c;日期窗碰撞边缘后会消失&#xff0c;解决方法是增加 trigger: click 属性。 laydate.render({ elem: #kp_date , type: date , trigger: click });