双指针刷题(二)

所有算法文章链接(最底部)

http://t.csdnimg.cn/IbllR

目录

1.快乐数

分析题意

解题思路

代码实现

2.盛最多水的容器

分析题意

解题思路

代码实现


1.快乐数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

分析题意

把一个正整数n的每一位都平方后相加,一直重复这个过程,在这个过程中如果出现1,说明这个数是快乐的,如果没出现就会陷入循环。

如过n = 2 就会陷入循环,2就不是快乐数。

解题思路

这道题无非就是两种情况,第一种是能出现1,第二种是没出现1陷入循环。

我们可以把这两种情况抽象成一种情况,两种情况都会进入循环,只不过第一种情况进入的都是1的循环中。

可以采用快慢指针的方法,快指针一次走2步,慢指针一次走一不。

不管哪种情况,快慢指针都会进入环中,而且一定会相遇,我们只需要判断相遇之后,位置是不是1就好了。

代码实现

cpp 复制代码
class Solution {
public:
    int getnum(int n){ //进行一步运算
        int ret = 0;
        while(n){
            int tmp = n%10;
            ret += tmp*tmp;
            n/=10;
        }
        return ret;
    }


    bool isHappy(int n) {
        int fast = getnum(n),slow = n;
        while(fast != slow){//快慢指针相遇就终止

            fast = getnum(getnum(fast));//块指针走两步
            slow = getnum(slow);//慢指针走一步

        }
        if(fast== 1){//判断快慢指针相遇后是否为1
            return true;
        }
        return false; 

    }
};

2.盛最多水的容器

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

分析题意

有一个存储板子的高度的数组,这些板子是可以切换的,问这些板子和x轴围成的容器,最大的容积是多少。

解题思路

这道题是一个非常明显的双指针算法,两个指针指向两块板子

维护一个容积的最大值

这两个指针,那个指针指向的板子高度低,哪个向中间移动,因为向中间移动,x轴会变短,容积会减小,向中间移动长板子的指针,容积要么减小要么不变,移动指向短板子的指针,容积要么不变要么变大。

代码实现

cpp 复制代码
class Solution {
public:
    int maxArea(vector<int>& height) {
        int l = 0, r = height.size()-1;
        int maxcap = 0;//最大容积
        while(l < r){//两个板子相遇就终止
            int len = r-l;
            int minheight = min(height[l],height[r]);//找到两个板子最小的高度
            maxcap = max(maxcap,len * minheight);//维护最大容积
            if(height[l] < height[r]) l++;//哪个板子短,哪个向中间移动
            else r--;
        
        }
        return maxcap;
    }
};
相关推荐
罗西的思考3 小时前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习
民乐团扒谱机3 小时前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
Nil2084 小时前
leetcode 160相交链表
算法·leetcode·链表
迷途之人不知返5 小时前
算法系列2:滑动窗口
算法
Herbert_hwt5 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
Tisfy7 小时前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口
-dzk-7 小时前
【技巧】LC 136.只出现一次的数字
算法·异或
有点。7 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
专注仿真8 小时前
问答大模型技术方案算法实现-RAPTOR树构建算法与BEG集成使用
python·算法
zlinear数据采集卡8 小时前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源