LeetCode 11

双指针解法:

首先分析题目,盛水的容量其于宽度与小的高度,先初始化两个指针分别在第一个与最后一个数(i,j)

如下:

我们可以分析发现,当heigth[i]为3时,我们移动j只会让宽度变小,所以i++,同理当i=1时,需要j--,当i=j时,遍历结束。

这样我们就省略了固定一个指针遍历其他指针的时间,时间复杂度降低到O(n)。

同时,记录每次的面积,最终取最大值。

代码:

cpp 复制代码
class Solution {
public:
    int maxArea(vector<int>& height) {
       int res=0;
       int i=0;
       int j=height.size()-1;
       while(i<j)
       {
        int area=(j-i)*min(height[i],height[j]);
        res=max(res,area);
        if(height[i]<height[j])
        {
            i++;
        }else{
            j--;
        }
       }
       return res;
    }
};
相关推荐
季明洵几秒前
回溯介绍及实战
java·数据结构·算法·leetcode·回溯
m0_662577975 分钟前
模板编译期哈希计算
开发语言·c++·算法
m0_662577975 分钟前
C++代码静态检测
开发语言·c++·算法
阿贵---5 分钟前
编译器命令选项优化
开发语言·c++·算法
add45a6 分钟前
分布式计算C++库
开发语言·c++·算法
2401_8942419212 分钟前
基于C++的数据库连接池
开发语言·c++·算法
阿贵---12 分钟前
C++中的适配器模式
开发语言·c++·算法
酉鬼女又兒15 分钟前
零基础快速入门前端JavaScript 浏览器环境输入输出语句全解析:从弹框交互到控制台调试(可用于备赛蓝桥杯Web应用开发赛道)
前端·javascript·职场和发展·蓝桥杯·js
木井巳16 分钟前
【递归算法】全排列
算法·leetcode·决策树·深度优先·剪枝
dapeng287019 分钟前
C++与Docker集成开发
开发语言·c++·算法