关于力扣2025.10.4每日 11.盛最多雨水的容器

最主要的观察是 ,左右两个柱子中较矮的柱子决定了异侧柱子构成面积的上限。

故此时r便无需移动,l右移即可,反之同理。

python代码如下

python 复制代码
class Solution:
    def maxArea(self, height: List[int]) -> int:
        left = 0 
        n = len(height)
        right = n- 1
        ans  = 0 
        while left <= right:
            ans = max(ans,(right - left)*min(height[right],height[left]))
            if height[right] > height[left]:
                left += 1
            else:
                right -= 1
        return ans

c++代码如下

cpp 复制代码
class Solution {
public:
    int maxArea(vector<int>& height) {
        int l = 0 ;
        int n = height.size();
        int r = n - 1;
        int ans = 0;
        while (l <= r){
            ans = max(ans,(r-l)*(min(height[l],height[r])));
            if (height[l] > height[r]){
                r --;
            }else{
                l ++;
            }

        }
        return ans;
        
    }
};

学习了灵神的写法,用了一种

cpp 复制代码
height[left] < height[right] ? left++ : right--;

的写法。这种写法是一种三元运算符。当True选择前面 ,False选择后面。这样写能减少码量,使代码更加简洁,而功能与if else等效。

双指针写法的本质是排除必然不更优,而如何观察出必然不更优?

我的理解是先放指针,再尝试移动左右指针,若全部移动都不更优,那么更新就不更新同侧了。

时间复杂度O(n),空间复杂度O(1)

相关推荐
小玮看世界35 分钟前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
黎阳之光39 分钟前
数字孪生赋能全域水网,实现水资源管控与节水降碳双向提升
人工智能·物联网·算法·安全·数字孪生
随意起个昵称1 小时前
【BFS】冰面滑行
算法·宽度优先
(Charon)2 小时前
【C++】定时器进阶:使用最小堆管理定时任务
c++·算法
hansang_IR2 小时前
【题解】 [省选联考 2021 A/B 卷] 卡牌游戏
c++·算法
这个DBA有点耶3 小时前
COUNT慢不是因为用了*,是这5个原因——1000万行数据实测+执行计划深度解析
数据库·mysql·算法
贾伟康3 小时前
【口算王|01】HarmonyOS ArkTS 口算题生成实战:按年级、运算类型和难度生成可控题目
算法·harmonyos·arkts·随机生成·口算题
lzx_0023 小时前
C++11(一)
开发语言·c++·算法
529宝宝起名网3 小时前
用 Python 实现名字寓意评分算法:基于 NLP 语义分析的名字内涵深度评估
python·算法·自然语言处理
ocean21033 小时前
2025-2026年AI提效与实践大厂面试高频问题
人工智能·面试·职场和发展·提示词工程·ai提效