LeetCode每日一题之 移动0

前言:

  我的每日一题专栏正式开始更新,我会分享关于我在LeetCode上刷题时的经验,将经典题型拿出来详细讲解,来提升自己及大家的算法能力,希望这篇博客对大家有帮助。

题目介绍: 

题目链接:. - 力扣(LeetCode)

算法原理:

  很明显这是一类数组划分的题目,那么这类题目常用解法,可以使用双指针法,注意这里提到的双指针是下标(索引),不是c语言中的指针。

  总所周知,两个指针会将整个数组分为3个区域,如下图:

 如果我们我们能将数组的元素,按如下图划分:

 也就是dest指向已处理的非0元素的最后一个,cur指向未处理元素的第一个,按照这样的规则走下去,当cur走到数组末端的时候,整个数组就变成了我们想要的样子。

那么如何遵循这样的规则往下走了,就是我们的算法体现了,看下面这个例子:

两个指针初始状态:

dest   -1  (dest指向已处理的最后一个元素,现在没有已处理的元素,所以指向-1)

cur  0 (cur要遍历整个数组,所以从0开始)

 下面介绍每个指针的行动规则:

cur:cur遇到0,cur++

dest:cur遇到非0,++dest,然后交换dest和cur对应的值,交换完后cur++

下面用上面的例子走一遍:

cur遇到第一个元素0,cur++:

cur遇到第二个元素1,非0, ++dest,然后交换dest和cur对应的值再cur++:

其实不难看出这已经到了我们上面的理想状态了,区域1是已处理的元素,区域2是0,区域3是未处理的,且dest指向已处理元素的最后一个,cur指向未处理元素的第一个。

继续, cur遇到第三个元素0,cur++:

 

cur遇到第四个元素3,非0, ++dest,然后交换dest和cur对应的值再cur++: 

 

cur遇到第五个元素0,cur++: 

cur遇到第六个元素12,非0, ++dest,然后交换dest和cur对应的值再cur++:  

此时cur走到数组末端,结束,该数组也被我们处理完毕。 

代码实现:

 c语言:

void swap(int* a,int* b)//交换函数
{int tmp=*a;*a=*b;*b=tmp;
}
void moveZeroes(int* nums, int numsSize) {int dest=-1,cur=0;//两个指针的初始位置while(cur<numsSize){if(nums[cur]!=0)//遇到非0时{++dest;swap(&nums[dest],&nums[cur]);}cur++;//无论怎样cur都需要++,所以可以直接写在这}
}

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

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

相关文章

SpringBoot+aop实现主从数据库的读写分离

读写分离的作用是为了缓解写库&#xff0c;也就是主库的压力&#xff0c;但一定要基于数据一致性的原则&#xff0c;就是保证主从库之间的数据一定要一致。如果一个方法涉及到写的逻辑&#xff0c;那么该方法里所有的数据库操作都要走主库。 一、环境部署 数据库&#xff1a;…

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

【leetcode】用队列实现栈

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: 在做此题之前&#xff0c;我们先要实现队列&#xff0c;这在上个博客中已经写过&#…

学习人工智能的方法及方向!

目录 一、第一部分&#xff1a;了解人工智能 二、人工智能学习路线图 三、职业规划 四、未来展望 五、总结 在这个信息爆炸的时代&#xff0c;想要系统性地学习人工智能&#xff08;AI&#xff09;并找到对应方向的工作&#xff0c;你需要一个明确的学习路径和职业规划。本…

复合机器人是一种集成了移动机器人

复合机器人是一种集成了移动机器人、协作机器人和机器视觉等多项功能的新型机器人。它的开发目的是为了解决工厂物流中最后一米的问题&#xff0c;提供智能搬运解决方案。复合机器人不仅集成了自主移动机器人&#xff08;AMR&#xff09;、机械臂等工作单元&#xff0c;还使用了…

Java电梯模拟

Java电梯模拟 文章目录 Java电梯模拟前言一、UML类图二、代码三、测试 前言 此程序为单线程简单模拟电梯(初版)&#xff0c;如果存在问题或者设计不合理的地方&#xff0c;请大家帮忙指出。 一、UML类图 二、代码 电梯调度器 package cn.xx.evevator;import java.util.*;pub…

#LLM入门|Prompt#2.1_第二部分:搭建基于 ChatGPT 的问答系统_简介_Introduction

《第二部分&#xff1a;搭建基于 ChatGPT 的问答系统》&#xff01; 本部分基于吴恩达老师与OpenAI合作开发的课程《Building Systems with the ChatGPT API》创作&#xff0c;旨在指导开发者基于ChatGPT的API进行智能问答系统的构建。 课程内容 课程背景&#xff1a; 使用C…

Web3游戏基础设施提供商Stardust为Sui上的游戏开发者提供支持

Stardust将其在钱包服务&#xff08;wallets-as-a-service&#xff09;基础设施和用户获取平台方面的专业知识带到了Sui&#xff0c;为游戏开发者提供了关键的帮助&#xff0c;以吸引玩家。近日&#xff0c;Stardust公司宣布将为Sui游戏开发者调整其成熟的钱包服务&#xff08;…

MySQL:开始深入其数据(四)select子查询

select眼熟吧?(都三节了) 又开始学习了 在 MySQL 中&#xff0c;子查询&#xff08;subquery&#xff09;是指在一个查询内嵌套另一个完整的 SELECT 语句。子查询可以嵌套在 SELECT、INSERT、UPDATE、DELETE 语句中&#xff0c;用于从内部查询结果中获取数据&#xff0c;进而完…

vue3 的await async

在 Vue 3&#xff08;以及大多数现代的 JavaScript 环境中&#xff09;中&#xff0c;async 和 await 是用来处理异步操作的关键字。这些关键字使你能够以同步的方式编写异步代码&#xff0c;使代码更加易读、易写&#xff0c;并且有助于管理异步流程。 async async 关键字用…

基于springboot的宠物咖啡馆平台的设计与实现论文

基于Spring Boot的宠物咖啡馆平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于Spring Boot的宠物咖啡馆平台的设计与实现的开发全过程。通过分析基于Spring Boot的宠物咖啡馆平台的设计与…

每日一题——LeetCode1566.重复至少K次且长度为M的模式

方法一 暴力枚举 var containsPattern function(arr, m, k) {const n arr.length;for (let l 0; l < n - m * k; l) {let offset;for (offset 0; offset < m * k; offset) {if (arr[l offset] ! arr[l offset % m]) {break;}}if (offset m * k) {return true;}}r…

k8s 网络概念与策略控制

一、Kubernetes 基本网络模型 Kubernetes 的容器网络模型可以把它归结为约法三章和四大目标。 1、约法三章 约法三章确保了Kubernetes容器网络模型的基本特性&#xff1a; ① 任意两个 pod 之间可以直接通信&#xff1a;在Kubernetes中&#xff0c;每个 Pod 都被分配了一个…

题记(47)--连续因子

目录 一、题目内容 二、输入描述 三、输出描述 四、输入输出示例 五、完整C语言代码 一、题目内容 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff0c;其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N&#xff0c;要求编写程序求出…

React-router的创建和第一个组件

需要先学react框架 首先&#xff1a;找到一个文件夹&#xff0c;在文件夹出打开cmd窗口&#xff0c;输入如下图的口令 npx create-react-app demo 然后等待安装 安装完成 接下来进入创建的demo实例 cd demo 然后可以用如下方式打开vscode code . 注意&#xff1a;不要忽略点号与…

Vue--》打造简易直播应用平台项目实战

今天开始使用 vue3 + ts 搭建一个简易直播应用平台项目,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本…

AWS对文本进行语言识别

AWS提供了名为Amazon Comprehend 的服务&#xff0c;它支持对文本进行语言识别。Amazon Comprehend 是一项自然语言处理&#xff08;NLP&#xff09;服务&#xff0c;它可以用于分析文本并提取有关文本内容的信息。 我们可以通过使用 Amazon Comprehend API 轻松地集成这些功能…

机械臂与tftp

机械臂&#xff1a; #include<myhead.h> #define SER_IP "192.168.126.2" #define SER_PORT 8888#define CLI_IP "192.168.252.165" #define CLI_PORT 9999int main(int argc, const char *argv[]) {int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-…

支持向量机 SVM | 线性可分:公式推导

目录 一. SVM的优越性二. SVM算法推导小节概念 在开始讲述SVM算法之前&#xff0c;我们先来看一段定义&#xff1a; 支持向量机(Support VecorMachine, SVM)本身是一个二元分类算法&#xff0c;支持线性分类和非线性分类的分类应用&#xff0c;同时通过OvR或者OvO的方式可以应用…

安装Docker及DockerCompose

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…