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

双指针算法实战:快乐数与盛最多水的容器

快乐数问题利用快慢指针检测数字变换过程中的循环,结合鸽巢原理确保终止条件;盛水最多容器问题通过双指针从两端向中间收缩,优先移动短边以最大化面积。两者均为双指针技术的经典应用场景。

魔法巫师发布于 2026/3/17更新于 2026/6/1120 浏览
双指针算法实战:快乐数与盛最多水的容器

快乐数

题目描述

判断一个正整数是否为快乐数。如果一个数经过以下操作最终变为 1,则它是快乐数:将各位数字平方后求和。否则,它不是快乐数。

原理解析

要判断是否快乐,关键在于检测是否存在循环。根据鸽巢原理,数字变换后的结果必然落入有限区间(对于 21 亿以内的数,各位平方和最大为 810)。这意味着无论怎么变换,数值迟早会重复。一旦重复,就进入了死循环。

我们可以使用快慢指针来检测循环。定义两个指针,慢指针每次走一步,快指针每次走两步。如果存在循环且包含 1,快慢指针最终会在 1 处相遇;如果循环不包含 1,它们会在循环内的某点相遇。

代码实现

// 计算各位数字的平方和
int getNext(int n) {
    int sum = 0;
    while (n > 0) {
        int digit = n % 10;
        sum += digit * digit;
        n /= 10;
    }
    return sum;
}

bool isHappy(int n) {
    int slow = n;
    int fast = getNext(n);
    while (slow != fast) {
        slow = getNext(slow);
        fast = getNext(getNext(fast));
    }
    return slow == 1;
}

盛最多水的容器

题目描述

给定一个非负整数数组,代表高度,找出两条线使得它们与 x 轴共同构成的容器能容纳最多的水。

原理解析

容器的容量取决于宽度(两线距离)和高度(较短的那条线)。公式为:面积 = 距离 × min(左高,右高)。

使用双指针,分别指向数组首尾。计算当前面积并更新最大值。为了获得更大的面积,我们需要尝试增加高度。由于宽度会随着指针相向移动而减小,只有移动较短的那条边,才有可能遇到更高的边从而增加面积。如果移动较长的边,高度只会变低或不变,面积必然减小。

代码实现

int maxArea(int* height, int heightSize) {
    int left = 0;
    int right = heightSize - 1;
    int maxV = ;
    
     (left < right) {
         h = height[left] < height[right] ? height[left] : height[right];
         w = right - left;
         currentArea = h * w;
        
         (currentArea > maxV) {
            maxV = currentArea;
        }
        
         (height[left] < height[right]) {
            left++;
        }  {
            right--;
        }
    }
     maxV;
}
0
while
int
int
int
if
if
else
return

目录

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

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

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

更多推荐文章

查看全部
  • OpenClaw 跨平台安装指南:Windows 与 Ubuntu
  • AI 辅助构建高可用电商系统核心架构实战
  • 使用 Copilot 反向代理部署 Claude 本地开发环境
  • C++ 基础教程:从历史演进到核心语法详解
  • C++ string 类常用成员函数与全局函数解析
  • Trae IDE 配合 MCP Server 实现 Figma 到前端代码的自动化转换
  • Java SSM 宠物常规护理知识科普管理系统
  • AI 驱动的自动化运维机器人:从数字劳动力到智能协作者
  • Git 合并时忽略特定文件的 6 种实用技巧
  • 安路 FPGA 下载器驱动安装与测试教程
  • Qwen3.5 大模型单 GPU 高效部署与股票筛选应用
  • 大模型应用开发主流架构:通用大模型与垂直小模型协同
  • HarmonyOS6 RcIcon 组件属性系统与样式定制策略
  • SpringBoot 整合 LangChain4j 与 Tavily 实现联网搜索及 API Key 获取
  • UI UX Pro Max:AI 驱动的现代前端 UI 工作流实战
  • 3-RPS 并联机器人运动仿真与轨迹控制
  • AIGC - Raphael AI:全球首个无限制免费 AI 图片生成器
  • Windows 环境下安装 Pandas 的常见坑点与解决方案
  • C++ 部署 ONNX 模型的低延迟高吞吐优化技巧
  • WhisperLiveKit 实时语音识别:安装、配置与生产部署

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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