[LeetCode] Container With Most Water

来源:互联网 发布:淘宝访客量越来越少 编辑:程序博客网 时间:2024/05/22 01:58

题目

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

思路

这道题采用双层循环暴力求解肯定会Time Limited,其实考察的是Two Pointers的知识点,给定两个指针left和right分别指向容器的左端和右端,向中间靠拢,可以在O(n)时间里找到最大容量。核心思想是:当left的高度<right的高度时,就不需要考虑left和right右侧的线段为两端的容器了,因为决定容器容量多少取决于较短的那条线段,令left++,反之亦然。

代码

public class Solution {    public int maxArea(int[] height) {        int left = 0;        int right = height.length - 1;        int maxVolume = 0;                 while (left < right) {            int volume = Math.min(height[left],height[right])*(right - left);            if (volume > maxVolume)                maxVolume = volume;            if (height[left] <= height[right])                left++;            else                right--;        }        return maxVolume;    }}


0 0
原创粉丝点击