题目1:快乐数

我们先来结合实例看一下判断快乐数的整个过程:

结合题目可以知道,如果一个数是快乐数,那么这个数最终就会变成1,如果一个数不是快乐数,那么变化序列最终就会陷入循环。想一下,如果题目没有告诉我们“如果一个数不是快乐数,最后会陷入死循环”这句话,我们应该如何来证明这个观点?

这里就要用到小学学过的“鸽巢原理”(抽屉原理)来进行简单的证明。

鸽巢原理:如果一共有n个鸽巢,有n+1只鸽子,那么一定存在至少一个鸽巢,这个鸽巢里面的格子数大于1.

我们知道n是一个整型类型而且n>0,那么n的取值范围就在1~2^31-1,而2^31-1=2147483647,这个数一定小于9999999999,如果非快乐数的变化不是循环的,那么总有一次会变成最大的那一个数2147483647,而这个数小于9999999999,在经过题目所说的变化以后,一定会变成小于(9^2)*10=810的数x,所以这个数经过相应的又会进入新一轮的循环,所以我们一开始的假设(即非快乐数的变化不是循环的)是错误的,所以一个非快乐数,他经过相应的变化以后会进入一个循环的序列。

结合上图和解释,我们可以将序列的变化抽象为下面的图:

如果看过数据结构之链表篇的兄弟对这一张图一定很熟悉,这就是我们之前做的带环的链表的那一道题(这道题可以参考:https://blog.csdn.net/pusue_the_sun/article/details/150438603?fromshare=blogdetail&sharetype=blogdetail&sharerId=150438603&sharerefer=PC&sharesource=pusue_the_sun&sharefrom=from_link)

在那一道题中我们所使用的思路是前后指针,同理这一道题我们也可以使用前后指针的思想。

我们先定义一个快指针和慢指针,初始时慢指针的值就等于n,而快指针的值就等于n经过一次变化以后所得到的值。然后每次让慢指针经历一次变化,快指针经过两次变化,最后快慢指针一定都会进入成环的那一部分,那么最终快慢指针就一定会相遇,即它们两个的值一定会相同(这个结论的分析过程见带环的链表那一道题),接下来我们只需判断当它们两的值相同时,slow的值是1还是其他值,如果是1,那么就代表n是快乐数,反之就不是快乐数。

//快慢指针
//将一个数替换为他们个位置上的数字的平方和
int Func(int n)
{int m=n;int sum=0;while(m){int x=m%10;sum+=x*x;m/=10;}return sum;
}
bool isHappy(int n) 
{int slow=n;int fast=Func(n);while(fast!=slow){slow=Func(slow);fast=Func(fast);fast=Func(fast);}return slow==1;
}

题目2:盛最多水的容器

方法一:暴力求解。这道题我们当然可以使用双层循环求任意两个区间中容器的体积,然后比较得到最大的容积。但是,这个思路虽然好想,时间复杂度却太高了,无法通过题解。

方法二:双指针法。我们知道,对于任意一个区间,容器的体积是由宽度和高度两部分决定的,根据木桶效应,一个区间容器的高度有较小的高度决定。假设我们一开始将宽度拉到最大,即包含整个区间(区间范围是  [0,heightsize-1]  ),算出这一部分的体积,然后再缩小宽度,依次去计算对应区间的体积并比较,然后就可以得到最大体积。我们应该如何缩小宽度才能达到找到最大体积的目的呢?我们知道,体积是由宽度和高度共同决定的,当我们缩小宽度时,如果还想让体积变大,就一定要让高度变大,所以对于区间的两个端点,我们需要舍弃对应高度较小的那一个端点来缩小宽度。

结合上述思路我们来整理出这道题的算法步骤:

1.定义两个指针right和left分别指向数组的最右边和最左边

2.计算left到right区间的容积

3.缩小区间范围,如果left对应的高度小于right对应的高度,就让left++;反之就让right--

4.通过比较更新最大容积

现在我们就可以来写代码啦:

int maxArea(int* height, int heightSize) 
{int max=0;int left=0,right=heightSize-1;while(left<right){int h=height[left]<height[right]?height[left]:height[right];int v=h*(right-left);if(height[left]<height[right]){left++;}else{right--;}if(v>max){max=v;}}return max;
}

小结这一小节我们主要通过两个算法题对应用双指针的解题思路进行了讲解。小伙伴们一定要自己在草稿纸或者电脑上多画一下图以深入理解算法的思想。

欢迎小伙伴们在评论区提出问题和讨论!!!

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

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

相关文章

Oracle体系结构-数据文件(Data Files)

一、 数据文件的本质与原理 物理存储的基石&#xff1a; 数据文件是 Oracle 数据库在操作系统层面最核心、最基础的物理存储单元。它们是存储在服务器硬盘&#xff08;或存储阵列&#xff09;上的操作系统文件&#xff08;如 .dbf, .ora 扩展名常见&#xff0c;但非强制&#x…

【C++练习】18.C++求两个整数的最小公倍数(LCM)

目录C求两个整数的最小公倍数(LCM)的方法方法一&#xff1a;利用最大公约数(GCD)计算代码实现方法二&#xff1a;逐次增加法代码实现方法三&#xff1a;质因数分解法代码实现方法比较处理大数和特殊情况改进版GCD方法实现 C求两个整数的最小公倍数(LCM)的方法 最小公倍数(LCM)是…

Linux网络:应用层协议http

前言 虽然我们说&#xff0c;应用层协议是我们程序猿自己定的。但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用.HTTP(超文本传输协议)就是其中之一。 我们之前已经学了UDP与TCP套接字的简单使用&#xff0c;以及讲解了进程间的各种关系&a…

ffmpeg推流测试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、操作步骤1.测试12.测试2总结前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 环境信息&#xff1a; 摄像头&#xff1a;usb摄像头 &a…

Docker的使用及核心命令

文章目录Docker基础概念镜像管理命令镜像查看和搜索镜像下载和删除镜像构建容器生命周期管理创建和启动容器容器控制命令容器清理容器交互和调试进入容器文件操作日志和监控数据管理数据卷&#xff08;Volume&#xff09;绑定挂载网络管理网络基础操作端口映射Dockerfile和Dock…

考研408计算机网络第36题真题解析(2021-2023)

&#xff08;2023.36&#xff09;在使用 CSMA/CD 协议的环境中&#xff0c;使用截断二进制指数退避算法&#xff0c;来选择重传时机&#xff0c;算法 有如下规定&#xff1a; &#xff08;1&#xff09;基本的退避时间为争用期 2τ&#xff0c;假设某网络具体的争用期为 51.2us…

Asio C++ Library是用来做什么的

hriskohlhoff/asio 是由 Chris Kohlhoff 主导维护的开源 C 库&#xff0c;专注于提供高效、跨平台的异步 I/O 支持&#xff0c;广泛应用于网络编程、并发控制和高性能系统开发。 &#x1f4d8; 项目概述 项目名称&#xff1a;Asio C Library 下载地址&#xff1a;https://down…

ac791的按键ad_channel

每次ad_channel这个参数都要给我一定的迷惑性&#xff0c;让我以为这是通道的数量

机器人巡检与巡逻的区别进行详细讲解和对比

机器人巡检与巡逻的区别进行详细讲解和对比 尽管这两个词经常被混用&#xff0c;但在技术和应用层面上&#xff0c;它们有着本质的区别。核心区别在于&#xff1a;巡检是“深度体检”&#xff0c;而巡逻是“治安巡查”。 以下将从多个维度进行详细讲解和对比。 一、核心概念与目…

先进电机拓扑及控制算法介绍(3)——以“数据”驱动电机实现真正的无模型

1. 背景介绍 之前已经介绍过“无模型预测控制&#xff08;Model-Free Predictive Control/MFPC&#xff09;”中的“无模型预测电流控制&#xff08;Model-Free Predictive Current Control/MFPCC&#xff09;”&#xff0c;可参考下面知乎。 https://zhuanlan.zhihu.com/p/6…

C primer plus (第六版)第十一章 编程练习第5,6题

题目&#xff1a;5&#xff0e;设计并测试⼀个函数&#xff0c;搜索第1个函数形参指定的字符串&#xff0c;在其中查找第2个函数形参指定的字符⾸次出现的位置。如果成功&#xff0c;该函数返指向该字符的指针&#xff0c;如果在字符串中未找到指定字符&#xff0c;则返回空指针…

Altium Designer(AD)PCB丝印批量修改

目录 1 Altium Designer(AD)PCB丝印的字体批量修改 1.1选中所有丝印 1.1.1选中一个丝印:鼠标左键点击 1.1.2查找相似对象:鼠标右键或快捷键N 1.1.3如下图所示丝印被全部选中 1.2丝印字体信息修改 1.2.1打开属性面板——>位置/属性/字体修改 1.2.2丝印字体修改 1.2.…

AI+华为HarmonyOS开发工具DevEco Studio详细安装指南

作者&#xff1a;长江支流 日期&#xff1a;2025-09-13 第一部分&#xff1a;AI工具使用 一、如何使用DeepSeek帮助自己的工作&#xff1f; &#xff08;一&#xff09;提示词 为了与时俱进&#xff0c;充分利用最新技术、提高效率&#xff0c;采用AI生成部分材料&#xf…

【Ambari监控】— API请求逻辑梳理

附录&#xff1a;完整内容和源代码下载请参照 https://doc.janettr.com/ 一、前序章节回忆 我们在前面章节拆解了 Collector 的启动过程&#xff0c;并定位了控制器 TimelineWebServices。 本节聚焦 Collector 对外暴露的 REST 服务&#xff0c;搭建「接口全景图」。 二、接口…

论文阅读 2025-9-13 论文阅读随心记

随便记录一下最近阅读的几篇论文 1. Does DINOv3 Set a New Medical Vision Standard? 第一章 动机 (Motivation) 自然图像领域的成功范式&#xff1a;大型语言模型&#xff08;LLMs&#xff09;和视觉基础模型&#xff08;如 DINO 系列&#xff09;证明&#xff0c;通过自监督…

Avalonia 基础导航实现:从页面切换到响应式交互全指南

在 Avalonia 开发中&#xff0c;导航功能是构建多页面应用的核心需求。Avalonia 无需依赖第三方库&#xff0c;仅通过内置控件与 MVVM 模式即可实现灵活的页面切换。本文将以 “基础导航” 为核心&#xff0c;从 ViewModel 与 View 设计、导航逻辑实现&#xff0c;到样式美化与…

UniApp 分包异步化配置及组件引用解决方案

具体参考微信小程序文档基础能力 / 分包加载 / 分包异步化 一、分包页面组件配置 在 UniApp 的pages.json中&#xff0c;为分包页面&#xff08;或主包如 tabbar 页面&#xff09;配置异步组件时&#xff0c;需同时设置usingComponents和componentPlaceholder&#xff1a; {&…

系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

微论-神经网络特征空间的动态聚集,对抗灾难性遗忘的新范式

这是一个非常有趣且富有想象力的理论构想。受陀螺仪启发&#xff0c;我将陀螺仪的“定轴性”与“进动性”原理引入神经网络的特征空间&#xff0c;探讨一种对抗灾难性遗忘的新范式。---### **基于陀螺仪原理的神经网络记忆巩固理论探讨**#### **引言&#xff1a;记忆的流失与稳…

鸿蒙审核问题——折叠屏展开态切换时,输入框内容丢失

文章目录背景解决历程1、无意中发现了眉目2、确定问题原因3、解决办法4、官方文档5、总结背景 奇葩的事情年年有啊&#xff0c;今年特别多。这不今天又遇到了一个奇葩的问题。鸿蒙NextAPP上架AppGallery市场&#xff0c;审核拒了&#xff0c;说是折叠屏手机展开态切换时&#…