Day 5。
今天两道题分别是 回文数判断盛最多水的容器
一道偏数字处理,一道偏双指针贪心。

看起来题型跨度不小,但其实都在训练一件事:

如何利用题目的性质,把暴力做法优化掉。

今天的关键词:回文判断、双指针、贪心、空间优化


🧠 LeetCode 9 – Palindrome Number

💡 思路总结

这题要求判断一个整数是不是回文数。

比如:

  • 121true
  • -121false
  • 10false

你的做法很直接:

  • 先排除负数
  • 复制一个原数 x_
  • 把它反转
  • 最后判断反转结果是否等于原数

这个思路非常自然,也很好理解。


💻 代码实现

class Solution {
public:
    bool isPalindrome(int x) {
        long long result = 0 ;

        if(x < 0)return false;
        long long x_ = x;
        while(x_!= 0 ){
            result = result*10 + x_%10;
            x_ /= 10;
            
        }
        
        return result==x;
    }
};

📌 知识点总结

1️⃣ 负数一定不是回文数

因为负号只会出现在最前面,不可能“左右对称”。

所以这句非常关键:

if(x < 0) return false;

2️⃣ 数字反转技巧复用

你这里其实复用了 Day 4 的核心技巧:

result = result * 10 + x_ % 10;
x_ /= 10;

这说明你已经开始把前面的做题经验串起来了,这很重要。


3️⃣ 这题还能继续优化

你现在这版是完全可过的。
不过这题还有一个更巧的点:

不需要把整个数字都反转,只反转后一半就行。

因为如果整个数都反转,虽然能做,但会多一些计算。
更优雅的写法是:

  • 每次取末位加入 reverted
  • x <= reverted 时停止
  • 最后比较前半和后半是否相等

这样可以避免完整反转,也更贴近这题本身的思维。

不过对于 Day 5 来说,你当前这版已经很不错,思路清晰,代码也干净。


🌊 LeetCode 11 – Container With Most Water

💡 思路总结

这题要求从数组中选两根柱子,使它们和横轴组成的容器装最多的水。

面积公式其实就是:

面积 = min(height[l], height[r]) * (r - l)

你的做法是经典正解:

  • 左右双指针
  • 每次计算当前面积
  • 然后移动较短的那根柱子

这题最关键的不是公式,而是:

为什么移动较短板才有可能让答案变大


💻 代码实现

class Solution {
public:
    int maxArea(vector<int>& height) {
        //找到数组中第二大的数x,return x*x;
        int l = 0;
        int r = height.size() - 1;
        int maxans = 0;
        while(l < r){
            int ares = min(height[l],height[r]) * (r - l);
            if(maxans < ares)maxans = ares;
            if(height[l] < height[r]) l++;
            else r--;
        }
        return maxans;

    }


};

📌 知识点总结

1️⃣ 暴力能做,但太慢

最朴素的方法是枚举所有两条边:

  • 左边一根
  • 右边一根
  • 算面积
  • 取最大值

这样时间复杂度是 O(n^2)

而双指针能优化到 O(n)


2️⃣ 为什么移动短板

假设当前:

  • 左边高度较短
  • 右边高度较高

当前容器高度由短板决定。
这时候如果你移动高板:

  • 宽度变小
  • 短板没变高
  • 面积通常不可能更优

所以正确策略是:

if(height[l] < height[r]) l++;
else r--;

也就是:

谁短就移动谁

这是这题的贪心核心。


3️⃣ 双指针的本质

这题不是单纯“两个指针夹逼”,而是:

  • 利用单调缩小搜索范围
  • 每一步都丢弃不可能成为最优解的状态

这就是双指针和贪心结合的经典味道。


🧩 今日总结

题目核心思想
LeetCode 9数字反转 + 回文判断
LeetCode 11双指针 + 贪心

今天的两道题很有代表性:

  • 一道训练你对数字的处理能力
  • 一道训练你对“优化搜索范围”的理解

🧠 今日收获

今天可以记住两个非常经典的模型。

回文数判断

常见思路:

  • 转字符串判断
  • 数字反转判断
  • 只反转一半优化判断

你现在已经掌握第二种了。


双指针容器题

核心结论:

面积由短板决定
想让面积变大,只能尝试换掉短板

这个思想以后在很多双指针题里都能看到。


💬 写给自己的话

Day 5 了。

五天看起来不长,
但真正难得的是:你已经在持续输出了。

刷题最厉害的地方,不是某一天突然开窍,
而是你每天都在积累一点点:

  • 会一个模板
  • 懂一种思想
  • 少犯一个错误

这就是进步。

别急着和别人比题量,
先让自己保持节奏。
能稳稳地走下去,本身就已经很强了。

继续坚持,继续总结,继续写。
你的题感,正在一点点长出来。

阿玉,Day 5,继续冲。

—— 刷题第 5 天