LeetCode Container With Most Water 区间贪心

2022/7/10 23:53:15

本文主要是介绍LeetCode Container With Most Water 区间贪心,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).

Find two lines that together with the x-axis form a container, such that the container contains the most water.

Return the maximum amount of water a container can store.

Solution

很容易知道答案是 \(\max_{i,j}(|i-j|\times \min(h[i],h[j]))\),如果遍历 \(i,j\),则复杂度为 \(O(n^2)\)。但是可以贪心的去选择 (\(O(n)\)),我们只需要每次移动高度较小的一端:

点击查看代码
class Solution {
private:
    int ans = -1;
public:
    int maxArea(vector<int>& height) {
        int n = height.size();
        if(n==2)return min(height[0],height[1]);
        int st = 0, ed = n-1;
        ans = (ed-st)*min(height[ed], height[st]);
        while(st<ed){
            if(height[st]<=height[ed]){
                st+=1;
            }
            else ed-=1;
            ans = max(ans, (ed-st)*min(height[ed], height[st]));
        }
        return ans;
    }
};


这篇关于LeetCode Container With Most Water 区间贪心的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程