【力扣算法题】双指针-战场上的矛与盾的组合(移动零)(快乐数)

前言

🌟🌟本期讲解关于力扣算法两道双指针题目解析~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~~

 

目录

📚️1.移动零

1.1题目要求

1.2题目解析

1.3代码编译

📚️2.快乐数

2.1题目要求

2.2题目解析

1.规定容器进行判断(简单)

2.双指针的算法(困难)

2.3代码编译

📚️3.总结


 

📚️1.移动零

1.1题目要求

移动零的题目位置,在这里:283. 移动零 - 力扣(LeetCode)

本题目如下:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

也就就表达:给一个数组,将所有的0移动到数组的后面,然后前面的数字的顺是不变的:

一个数组:[0  ,1  ,0  ,3  ,2]:经过改变后编变成了:[1  ,3  ,2  ,0  ,0]

如下图:

 

1.2题目解析

本题目像这种一般都是使用的双指针的算法,一般就是设置三个区间,左边就是处理过没有0的区间,中间全部都是零,然后右边就是没有处理的数字

注意:这里的指针不是学习c语言中的指针,这里的指针就是用数组的下标进行模拟,这里指针就是下标;

此时我们的思路就是:

起初:cur=0,dest=0

然后:cur往后面移动,如果遇到零就不管,若遇到非0的数,那么就和dest所示的数字进行交换,然后两个加加;

最后:判断两个cur是否已经到达了末尾的位置,这个就是一个循环跳出的条件

1.3代码编译

如下所示:

class Solution {public void moveZeroes(int[] nums) {int cur=0,dest=0;for(;cur<nums.length;cur++){if(nums[cur]!=0){int temp=nums[cur];nums[cur]=nums[dest];nums[dest]=temp;dest++;}}}
}

注意:这里由于每次cur都会加加,所以在循环里就不用操作cur了,然后期间,还添加了一个交换的操作,在我们学习语言的初期,就已经了解这个交换的过程,小编就不在进行过多的赘述了;

📚️2.快乐数

一个小玩笑就是,这里的快乐数其实挂着简单的标签,实则这里的操作一点也不简单,还一点也不快乐,看看大家的反应吧:

哈哈哈哈,所以这道题其实一点也不快乐;

2.1题目要求

力扣的题目的来源:202. 快乐数 - 力扣(LeetCode)

题目如下所示:

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false

总结就是:每次数字进行每一位的平方相加,然后看看是否为一,不是一就继续进行每一位的平法相加的操作;如下所示:

19  ----82-----68-----100----1

此时这个就是一个快乐数字~~~ 

2.2题目解析

1.规定容器进行判断(简单)

这里就是通过一个容器存储每次得到的数字,然后拿到一个数字后,与容器中的数字进行比较,看看是否存在,若存在就返回失败,反之若得到1,那么就返回true;

为啥如果存在就直接返回false呢??

如下图所示:

可以看到,此时若存在一样的值,就表示进入了一个循环的状态,那么此时就不可能拿到1了;

 所以某一刻拿到了1,此时就可以跳出循环了,若存在两个相等的数,就可以直接返回false了,因为后面就不会拿到1了~~~

2.双指针的算法(困难)

此时我们可以使用一个快慢的指针的模拟的操作,因为这里没有数组的下标的样式,所以这里我们就能够用实际的数字进行表示

快指针:一次移动两步

慢指针:一次移动一步

重点: 此时这两个指针一定是会存在相遇的情况,因为当为1的时候,就会进行全部是1的循环,那么我们就只需要判断,相遇的点是否是1,若是一就表示是快乐数,若相遇的数字不是1,那么此时就表示,进入了如上图所示的循环;

如下图所示:

 

若是一个快乐的数字,那么情况就是如下所示的:

2.3代码编译

第一种算法的情况:

class Solution {public boolean isHappy(int n) {List<Integer> list = new ArrayList<>(10);while (n != 1) {n = Sum(n);if (list.contains(n)) {return false;}list.add(n);}return true;}public int Sum(int num) {int sum = 0;while (num > 0) {int n = num % 10;num /= 10;sum += n * n;}return sum;}}

注意:这里就需要定义一个方法进行数字平法相加的算法,这里的循环条件就是是否为一,或者进入循环了,直接跳出;

 第二种算法的代码:

class Solution {public boolean isHappy(int n) {int slow = n;int fast = Sum(n);while (slow != fast) {slow = Sum(slow);fast = Sum(fast);fast = Sum(fast);}if (slow == 1) {return true;} else {return false;}}public int Sum(int num) {int sum = 0;while (num > 0) {int n = num % 10;num /= 10;sum += n * n;}return sum;}}

注意:我们进入循环的条件是两者不等,所以这里我们这里初始化两个指针的时候不能相等,这里fast要进行两次平方相加的过程,slow只需要进行一次平方相加的过程;

📚️3.总结

 对于双指针,本期主要讲解了一个移动零,与快乐数的操作,小编建议大家进行联系,在看了小编的题目分析后能够自己编写代码~~

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                 😊😊  期待你的关注~~~

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

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

相关文章

第三十九篇 ShuffleNet V1、V2模型解析

摘要 ShuffleNet V1 ShuffleNet V1是由旷视科技&#xff08;Megvii&#xff0c;又称Face&#xff09;在2017年底提出的一种轻量级卷积神经网络架构。该网络专为移动设备和边缘计算环境设计&#xff0c;旨在以较低的计算资源实现高效的图像分类和其他计算机视觉任务。 特点与…

Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

Springboot系列之&#xff1a;创建Springboot项目&#xff0c;Springboot整合MyBatis-plus 一、快速创建Spring boot项目二、项目完整目录三、pom.xml四、application.yaml五、实体类六、mapper七、IService接口八、Service实现类九、配置类十、枚举十一、增删改查测试类十二、…

C++:用红黑树封装map与set-1

文章目录 前言一、STL源码分析二、红黑树的构建三、map与set整体框架的搭建与解析四、如何取出进行比较&#xff1f;1. met与set的数据是不同的2. 取出数据进行比较1&#xff09;问题发现2&#xff09;仿函数解决 五、封装插入六、迭代器的实现1. operator* 与operator->2. …

Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

4-SpringCloud整合服务间的调用即负载均衡

springcloud目录&#xff1a; 1.Spring Cloud简介 2.SpringCloud整合eureka注册中心 3.SpringCloud整合服务注册 4.SpringCloud整合服务间的调用即负载均衡 5.SpringCloud整合Feign调用 6.SpringCloud整合config配置中心 7.SpringCloud整合zuul路由网关 我们复制一个yqx-user服…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

深入浅出,快速安装并了解汇编语言

1.什么是汇编语言 了解汇编语言需要先从了解机器语言开始&#xff0c;在计算机发展的初期阶段&#xff0c;机器语言是计算机直接理解和执行的二进制代码语言&#xff0c;其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成&#xff0c;这些…

2.2_3 纠错编码—海明码

目录 1、海明码的纠错过程 2、海明距离 3、确认检验码位数 4、确定校验码和数据的位置 5、求出校验码的值 6、检错并纠错 方法一 方法二 1、海明码的纠错过程 2、海明距离 两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距)&#xff0c;一…

1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据

1992-2021年 各省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09;区域汇总&#xff1a;省份、城市、区县面板数据 .r.rar https://download.csdn.net/download/2401_84585615/90001905 从1992年至2021年&#xff0c;中国各省份、城市及区县的夜间灯光数据经过…

微信小程序上传微信官方审核流程(1)

1&#xff0c;打开微信开发者工具 2&#xff0c;微信开发者工具右上角有一个上传按钮&#xff0c;点击上传按钮 3&#xff0c;点击完上传按钮会弹出一个上传成功的提示&#xff0c;点击提示框中的确定按钮 4&#xff0c;点击完确定按钮后会显示填写版本好和项目备注 5&#x…

快速获取镜像包的方法

1、当我们需要在无网络的环境中&#xff0c;在Docker环境中安装某个镜像时&#xff0c;需要先下载这个镜像包后&#xff0c;再上传 2、下面以在minio为例 在有网络的电脑中使用使用命令下载 docker pull minio/minio将下载好的tar包保存到指定的目录下 save -o /home/cl/app…

11 —— 打包模式的应用

需求&#xff1a;在开发模式下想让webpack使用style-loader进行css样式的处理&#xff1b;让它把css代码内嵌在js中&#xff1b;在生产模式下提取css代码 —— 判断当前运行命令时所在的环境 方案&#xff1a;借助cross-env全局软件包&#xff0c;设置参数区分打包运行环境 …

docker容器化部署springboot项目

前言 docker安装 下载官网 选择自己的系统 然后安装文档内给的命令按顺序执行即可。设置仓库&#xff0c;安装docker. 一、更换镜像源 一般情况下,docker原本自带的镜像网站不一定连的上,就很容易导致下载镜像失败,因此需要换源. 创建/etc/docker/daemon.json并填入数据…

2024深育杯misc2

题目描述&#xff1a;攻击者远程服务器监听所用的端口是( )&#xff1f;请提交flag&#xff0c;例如端口号为80&#xff0c;则提交Sangfor{80} 附件解压打开是一个raw文件 用volatility3工具查看ip链接信息

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

L14.【LeetCode笔记】返回倒数第k个节点

目录 1.题目 2.分析 思路 代码 提交结果 1.题目 面试题 02.02. 返回倒数第 k 个节点 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 …

linux-进程间通信

进程的通信是两个或多个进程实现数据的交互&#xff0c;让不同的进程看到同一份资源&#xff0c;而这份资源是由操作系统创建管理的。如果让其中一个进程来提供的话会破坏该进程的独立性&#xff0c;因为这个进程内部的数据可以被其他进程看到&#xff0c;那这个独立性就遭到了…

基于阿里云服务器部署静态的website

目录 一&#xff1a;创建服务器实例并connect 二&#xff1a;本地文件和服务器share 三&#xff1a;关于IIS服务器的安装预配置 四&#xff1a;设置安全组 五&#xff1a;建站流程 六&#xff1a;关于备案 一&#xff1a;创建服务器实例并connect 创建好的服务器实例在云…

Java算法OJ(10)哈希表练习

目录 1.前言 2.正文 2.1俩数之和 2.2无重复字符的最长子串 2.3罗马数字转整数 2.4整数转罗马数字 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来分享几道哈希表相关的练习题&#xff0c;操作比较基础但是思想比较重要&#xff0c;另外有许多思路与解法都是学习参照题解…

二叉树:堆的建立和应用

在建立堆之前&#xff0c;我们要知道什么是树和二叉树 树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个结点组成的一个具有层次关系的集合&#xff0c;之所以把它叫做树&#xff0c;是因为它长得像一棵倒挂的树&#xff0c;也就是根在上面&…