LeetCode刷题双指针(快乐数+盛最多水的容器)Java

一,快乐数

解题思路:

本题给我们明确说明了,不管是快乐数还是不是快乐数,我们最后都会进入一个循环,快乐数也就是无限的1循环,因为1再怎么平方也是1,然后不是快乐数的阿虎就是无限循环但是不是1,这个怎么证明呢,就拿题目中的2来说,我们通过计算得知,在我们计算到后面的时候,就会再次出现4这个数字,就会陷入循环,所以我们这题的解题思路就是,通过快慢指针,在循环里面相遇之后,得到的数字是不是1

代码演示:

java 复制代码
class Solution {
    //写一个方法实现每个位置上的数字的平方和相加
    public int sum(int n){
        int sumn=0;
        while(n!=0){
            int x=n%10;
            sumn +=x*x;
            n=n/10;
        }
        return sumn;
    }
    public boolean isHappy(int n) {
        //先定义a是第一个数字,也就是慢的那个。再定义b为计算一次的数字,也就是快的那个,至于为什么不定义一样的数字,因为我们要判断是否相等,如果一样的话直接跳出循环了
        int a=n;
        int b=sum(n);
        while(a!=b){
            a=sum(a);
            b=sum(sum(b));
        }
        if(a==1){
            return true;
        }else{
            return false;
        }
    }
}

二,盛最多水的容器

解题思路:

这题的核心也是使用双指针的方式,一个指针在最左边,一个指针在最右边,我们的容积=底*高,我们最开始最左以及最右就相当于是底是整个数组,然后我们就需要让相对较小的那一个数字指向的指针向内移动,这样才可能会出现高变高的情况,并且我们每次移动较小的那一边的指向一次,并且记录下来此时的容积大小,最后当我们的两个指针相遇的时候,我们就在刚刚计算的所有容积计算一个max,找到最大的就好了

代码演示:

java 复制代码
class Solution {
    public int maxArea(int[] height) {
        int left=0;
        int right=height.length-1;
        int 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;
    }
}
相关推荐
Yuzhiyuxia4 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
UIU1144 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi5 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David6 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院7 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng7 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~10 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py11 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing11 小时前
LeetCode100 42.接雨水
java·算法·leetcode