当前位置: 首页 > news >正文

每日一题: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语言语法中的指针,可以是数组下标,或者某个索引等…

相关文章:

  • 在Django中使用Q对象和条件运算符来构建动态查询
  • DDoS高防IP到底是什么?
  • C# 友元程序集
  • 225. 用队列实现栈 --力扣 --JAVA
  • linux下实现Qt程序实现开机自启动
  • LeetCode [简单](非递归)二叉树的中序遍历
  • Python爬虫遇到重定向URL问题时如何解决?
  • [密码学]DES
  • 【九日集训】第五天:排序
  • VSCode 代码调试
  • 使用Golang构建高性能网络爬虫
  • MGF4964BL-01 低噪声 InGaAs HEMT(高电子迁移率晶体管) K波段放大器 微X型塑料封装
  • C++模拟实现unordered_map和unordered_set
  • 【探索Linux】—— 强大的命令行工具 P.18(进程信号 —— 信号捕捉 | 信号处理 | sigaction() )
  • C++基础 -21-多继承与多级继承
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 11111111
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JAVA 学习IO流
  • jQuery(一)
  • js继承的实现方法
  • Python十分钟制作属于你自己的个性logo
  • 代理模式
  • 记一次删除Git记录中的大文件的过程
  • 简单易用的leetcode开发测试工具(npm)
  • 三分钟教你同步 Visual Studio Code 设置
  • 数据科学 第 3 章 11 字符串处理
  • 问题之ssh中Host key verification failed的解决
  • 一个完整Java Web项目背后的密码
  • FaaS 的简单实践
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 带你开发类似Pokemon Go的AR游戏
  • ​如何在iOS手机上查看应用日志
  • #QT(TCP网络编程-服务端)
  • #stm32驱动外设模块总结w5500模块
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $L^p$ 调和函数恒为零
  • (1)(1.13) SiK无线电高级配置(六)
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Knockout 创建自定义绑定
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (转)jQuery 基础
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net6Api后台+uniapp导出Excel
  • .pyc文件是什么?
  • @column注解_MyBatis注解开发 -MyBatis(15)