leetcode container with most water

本文介绍了一种寻找容器最大盛水量的算法实现。通过双指针技巧,从两端向中间逼近,每次移动高度较低的边界以尝试增大容器体积,直至两指针相遇。此方法时间复杂度为O(n),适用于解决特定类型的最大面积问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<vector>
#define min(a,b) (a>b? b:a)
#define max(a,b) (a>b? a:b)
using namespace std;
class Solution {
public:
    int maxArea(vector<int>& height) {
        int i=0; int j=height.size()-1;
        int res=(j-i)*min(height[i],height[j]);
        while(i<j){
         if(height[i]<height[j]){
          i++;
   }
   else
    j--;
   res=max(res,(j-i)*min(height[i],height[j]));
  }
  return res;
    }
};
看的人家的算法简单的理解了一下
假设取I,J两边界为初始值,那么在选择下个I或者J的时候先去height[I]和height[j]中较小的那个进行改变(假设height[I]<height[j]),因为我的目的是根据找到比较小值i进行改变,这样才能使容积有可能变得更大,如果选择较大值进行改变,改变j,那是不可能使容器更大的,讨论一下就可以知道了,所以就改变I呗,我的目的是是新的height[I]增大,找到下个height[新I]大于height[I]就好了  然后在整理比大小 看谁更大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值