算法——双指针(day2)

目录

202.快乐数

题目解析:

算法解析:

代码:

11.盛最多水的容器

题目解析:

算法解析:

代码:


202.快乐数

力扣链接:202.快乐数

题目解析:

本文中最重要的一句话就是重复平方和过程直到数字变为1,也可能是无限循环始终不变1.

这里我们可以画出示例图来分析。

我们最终可以发现只有两种情况,要么内部循环都为1,要么内部循环不为1.而二者共同点就在于一定会循环~

算法解析:

这里我们还是可以使用双指针的解法------快慢指针~相信大家不会陌生,**快慢指针通过慢走一步快走两步的特点可以很快判断出来是否成环(即循环)。**而本题我们不需要验证是否循环,只需要在快慢指针相遇的时候(无限循环中)判断环中数字是否为1即可~

代码:

cpp 复制代码
class Solution {
public:
    //处理平方和
    int sumsum(int n)
    {
        int sum = 0;
        while (n)
        {
            int a = n % 10;
            sum += a * a;
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        //初始化优先错开
        int slow = n;
        int fast = sumsum(n);
        //快慢指针相遇
        while (fast != slow)
        {
            slow = sumsum(slow);
            fast = sumsum(sumsum(fast));
        }
        return slow == 1;

    }
};

11.盛最多水的容器

11. 盛最多水的容器 - 力扣(LeetCode)

题目解析:

通过示例图可以我们看出基本计算为:选择的下标相减 X 两数间最小数

算法解析:

我们先划出一个小范围,然后尝试在该范围里面选出最大容量。我们优先选取两端数,这样可以保证长度是最长的,然后我们再尝试缩短范围(拿宽短的尝试比较),这样我们可以得出两种结果:

要么是 长度和宽度都减小了(2---4),要么是长度减小宽度不变(5--4).最终的容量都不如最开始v1(6--4)的大,因此我们可以直接排除4,因为在后续的比较中毫无意义。

当我们知道规律后就很简单了,列出双指针指向两端。记录每一次所指向的两个数对应的容量,然后两数谁小谁就先缩进一位继续比较,直到相遇。 最后我们再对比所有记录的容量选出最大的那个即可~

代码:

cpp 复制代码
class Solution {
public:
    int maxArea(vector<int>& height) {
        int n = height.size();
        int left = 0;
        int right = n-1;
        int sum = 0;
        int sum1 = 0;
        while(left<right)
        {
            sum1 = min(height[left],height[right])*(right-left);
            if(height[right]>=height[left])
            {
                left++;
            }
            else
            {
                right--;
            }
             sum = max(sum,sum1);
        }
        return sum;
    }
};
相关推荐
满怀冰雪5 分钟前
第05篇-滑动窗口算法-一套模板解决子串与子数组问题
java·算法
叫我:松哥13 分钟前
基于LSTM与ARIMA的城市空气质量分析与预测系统
人工智能·python·rnn·算法·机器学习·flask·lstm
j7~14 分钟前
【C++】模板初阶--函数模板,类模板详解
数据结构·c++·算法·函数模板·类模板·函数模板实例化
吴梓穆17 分钟前
UE5 C++ 注册 开始重叠和结束重叠事件
开发语言·c++·ue5
IT策士19 分钟前
Redis 从入门到精通:数据结构Hash 与 List
数据结构·redis·哈希算法
CodeSheep程序羊20 分钟前
宇树科技,即将上市!
java·c语言·c++·人工智能·python·科技·硬件工程
无限码力28 分钟前
阿里算法岗 0530笔试真题 - 寻找满足条件的最优子序列
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试真题·阿里算法题
@小阿宝34 分钟前
机器人正向逆向运动学
算法·机器人
小雨下雨的雨36 分钟前
数独算法与求解器鸿蒙PC Electron框架完成深度解析
javascript·人工智能·算法·游戏·华为·electron·鸿蒙系统
HZ·湘怡39 分钟前
数据结构之排序算法 (1)--插入排序
c语言·数据结构·算法·排序算法