跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

双指针专题:快乐数与盛水最多的容器

讲解双指针算法的两个经典应用。快乐数问题通过快慢指针检测数字变换过程中的循环,若最终收敛于 1 则为快乐数;盛水最多的容器问题利用双指针从数组两端向中间收缩,每次移动较短边以计算最大面积,时间复杂度优化至 O(N)。

DevStack发布于 2026/3/28更新于 2026/5/2626 浏览
双指针专题:快乐数与盛水最多的容器

双指针专题:快乐数与盛水最多的容器

一、快乐数

1. 题目解析

LeetCode 202. 快乐数

快乐数逻辑图

2. 原理分析

快乐数有两种情况:

  1. 数最后变成 1。 快乐数示例

  2. 无限循环但不是 1。 循环示例

这两种情况都可以抽象成带环链表的问题。

解法:快慢双指针

  1. 定义快慢指针。
  2. 慢指针每次向后移动一步,快指针每次向后移动两步。
  3. 判断相遇时候的值。
3. 代码实现
class Solution {
public:
    int BitSum(int n) // 返回每一位数上的平方和
    {
        int sum = 0;
        while (n) {
            int m = n % 10;
            sum += m * m;
            n = n / 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow = n, fast = BitSum(n);
        while (slow != fast) {
            slow = BitSum(slow);
            fast = BitSum(BitSum(fast));
        }
        return slow == 1;
    }
};

二、盛水最多的容器

1. 题目解析

LeetCode 11. 盛最多水的容器

容器示意图

2. 原理分析

解法一:暴力枚举 时间复杂度 O(N^2),会超时。

解法二:利用单调性,使用双指针 双指针示意图

在这一组数中拿出一个区间 6,2,5,4。我们先用最两边的数算一个容积,然后小的那个固定住(也就是 4),向内枚举。如果遇到比它小的数(也就是 2),高度跟宽度都减小,v 减小;如果遇到比它大的数(也就是 5),高度不变(还是 4),宽度减小,v 减小。所以我们可以直接舍去小的那一个,在研究下一个区间。

3. 代码实现
class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0, right = height.size() - 1, ret = 0;
        while (left != right) {
            int v = min(height[left], height[right]) * (right - left);
            ret = max(ret, v);
            if (height[left] < height[right]) left++;
            else right--;
        }
        return ret;
    }
};

目录

  1. 双指针专题:快乐数与盛水最多的容器
  2. 一、快乐数
  3. 1. 题目解析
  4. 2. 原理分析
  5. 3. 代码实现
  6. 二、盛水最多的容器
  7. 1. 题目解析
  8. 2. 原理分析
  9. 3. 代码实现
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • WeTTY 运维监控实战:构建企业级 Web 终端管理
  • ReAct Agent 与 Agent 编排:从单 Agent 闭环到多 Agent 协作
  • Python Flask Vue 图书借阅管理信息系统设计与实现
  • Docker 部署 Redis 并通过内网穿透远程管理
  • Mac Mini 部署 OpenClaw 实战指南
  • Git 核心指令速查:从初始化到分支管理实战
  • STL 转 STEP 格式转换工具 stltostp 安装与使用
  • 深度学习模型优化策略与实战调参
  • Gitee 本地账号与密码配置步骤
  • OpenClaw + Ollama 本地部署实战指南
  • Spring Cloud 优雅实现远程调用 - OpenFeign
  • OpenClaw 开源 AI 助手中文发行版部署指南:Docker 与 npm 安装
  • Python FastAPI 入门实战:从环境搭建到核心功能
  • 2026年全球AI大模型深度研究报告
  • 人工智能大语言模型技术发展研究报告(2024 年)
  • 汽车雷达多径幽灵目标检测:GLRT 与稀疏压缩感知解析
  • C++ STL list 容器详解:使用与模拟实现
  • Linux 网络编程实战:用 C++ 实现 JSON 解析与 HTTP 服务器
  • Android ScrollView 滑动实现标题栏渐变背景色
  • Ubuntu 安装 OpenClaw 并接入飞书机器人

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online