news 2026/10/1 2:57:17

盛水最多的容器与快乐数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
盛水最多的容器与快乐数

三、盛水最多的容器

给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和(i, height[i])。

找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

这题的暴力解法非常简单,属于有点基础都能做。

当然,还是会详细写一下。

首先容器的体积公式应该是常识,V=H×W,用容器的宽度乘高度。

为了方便记录宽度,需要用到两层循环。

每次遍历,算出所有的容积,依次比较,直到循环结束,留下的值就是最大容积。

代码:

class Solution { public int maxArea(int[] height) { int max=0; for(int i=0;i<height.length;i++){ for(int j=1;j<height.length;j++){ int hei=Math.min(height[i],height[j]); int v=(j-i)*hei; max=Math.max(max,v); } } return max; } }

这个代码虽然正确,但是在力扣上不通过。因为时间复杂度太高了。

不过,可以基于这个思路再想个更优的解法。

既然都需要遍历一次,不如单独拎出一个区间研究一下。

我们把指针定位在左右两端,算出这个位置的容积。再选择其中一个向内移动。

把 j 固定住,i 向右移动。

此时,发现了两种情况。

第一种,[ i ] 小于 [ j ],高度和宽度同时减小,容积减小。

第二种,[ i ] 大于 [ j ],高度不变,宽度减小,容积减小。

我们要的是最大容积,所以比较后,元素小的位置可以直接跳过,不需要进行计算。

这个题目核心思路就出来了。

指针由两侧向中间移动,等到循环结束时,存在变量里的值即为最大容积。

代码:

class Solution { public int maxArea(int[] height) { int left=0,right=height.length-1,ret=0; while(left < right){ int V=Math.min(height[left],height[right])*(right-left); ret=Math.max(ret,V); if(height[left]>height[right]){ right--; }else{ left++; } } return ret; } }

四、快乐数

编写一个算法来判断一个数n是不是快乐数。

「快乐数」定义为:

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

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

看看这两个例子快不快乐。

先看第一个 n = 19 。

第一个定义是啥意思?就是说,原本 19 的位置替换为 1²+9²=82。

然后依次继续替换,若是最后变成1的循环,则为快乐数。

所以第一个N为快乐数。

再看看第二个 n=2。

经历第N次后并没有循环到最开始的值,所以第二个N不是快乐数。

那么问题来了,现在知道19是快乐数,可是怎么验证?

这两个图示结构看着是不是很像链表,而链表里有一个算法题是判断链表是否成环。

我们可以借鉴这个题的思路,把 1 看成是链表的标记点,若两个链表其中一个值分别为 1 ,则说明链表成环。

有了方向接下来就很好做了。

但是,新的问题又来了,用什么方法判断一定会过标记点?

各位应该都做过不少题目,这类题最容易想到的就是快慢双指针。

既然成环了,那么快慢指针一定会在某个位置相遇。

但是这里没有数组,用什么当做指针?

其实,稍微思考一下不难发现,这东西很像链表,可以拿它每个替换的平方和作为指针。

于是,代码就写出来了。

这部分代码用来计算平方和,n 小于0 时循环结束。

这部分是判断是否成环主体。

代码:

class Solution { public int bitSum(int n){ int sum=0; while(n>0){ int t =n%10; sum+=t*t; n/=10; } return sum; } public boolean isHappy(int n) { int slow =n,fast=bitSum(n); while(fast != slow){ slow=bitSum(slow); fast=bitSum(bitSum(fast)); } return slow == 1; } }

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 2:57:12

无传感器永磁同步电机零速控制:高频注入估算转子位置全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 2:56:58

k8s的弹性伸缩

k8s弹性伸缩 自动扩缩容HPA 要实现扩缩容得先安装Metrics Server服务&#xff0c;因为自动扩缩容是通过监控容器得cpu或者memory得上限来实现弹性伸缩的&#xff0c;在 Kubernetes 集群中&#xff0c;Metrics Server 是一个用于收集和聚合集群内部组件的性能指标数据的服务。它…

作者头像 李华
网站建设 2026/10/1 2:55:45

RoPE 旋转位置编码

RoPE 旋转位置编码RoPE (旋转位置编码)流程step0 计算转速step1 算每个 token 的旋转角step2 求 cos / sinstep3 用 cos / sin 旋转 token&#xff08;作用到 Q 和 K&#xff09;总结RoPE (旋转位置编码) 流程 step0 计算转速 对于每个token xixixi,转速θ为[θ0,&#xff0…

作者头像 李华
网站建设 2026/10/1 2:55:43

Wi-Fi 电表选型的软件开发视角 —— 数据模型、寄存器和 CT 配置

Wi-Fi 电表选型&#xff0c;硬件上看电流接入和安装空间&#xff0c;软件上看数据模型好不好解析、云接口顺不顺、CT 变比怎么配。这一篇从开发者角度把三款产品的软件差异讲清楚。 选型三个问题对应三种数据结构 Wi-Fi 电表选型的三个基础问题 —— 单相还是三相、直连还是 …

作者头像 李华
网站建设 2026/10/1 2:55:28

EasyClick苹果自动化脚本怎么选路线?先看你每天要重复做什么

别先挑技术&#xff0c;先说你每天在做什么 问「苹果自动化脚本该选哪条路线」的人&#xff0c;多半已经看过一圈资料&#xff0c;知道有代理、有 USB HID、有蓝牙 HID&#xff0c;甚至知道各自的系统要求。但看完还是不知道选哪个。 原因是问错了顺序。路线不是选出来的&#…

作者头像 李华
网站建设 2026/10/1 2:55:28

后端0名额AI岗全批,薪资高20%,纯后端标签贬值如何破局?

后端0名额AI岗全批&#xff0c;薪资高20%&#xff0c;纯后端标签贬值如何破局&#xff1f; 近期脉脉上一则用户讨论揭示出强烈反差&#xff1a;Q3盘点中&#xff0c;某团队后端0名额获批&#xff0c;反而全批了2个AI应用工程师岗&#xff0c;且薪资高出后端20%。原帖用户讨论称…

作者头像 李华