• LeetCode Container With Most Water


    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.

    Note: You may not slant the container.

    思路分析:这题考察双指针和贪心,左右两个指针,从两端開始,假设左边较矮,那么我们移动左边指针向右,去看是否能找到更高的左“墙”,假设找到,就计算面积更新下眼下的maxArea;假设右边较矮,那么我们移动右边指针向左,去看是否能找到更高的右“墙”,假设找到,就计算面积更新下眼下的maxArea,直到两个指针相遇,返回maxArea

    AC Code

    public class Solution {
        public int maxArea(int[] height) {
            int l, r, lh, rh, max, temp;
            l = 0;
            r = height.length - 1;
            lh = height[l];
            rh = height[r];
            max = 0;
            
            while(l < r){
                temp = Math.min(lh, rh) * (r - l);
                if(max < temp) {
                    max = temp;
                }
                
                if(lh > rh){
                    //move r
                    while(l < r && height[r] <= rh){
                        r--;
                    } 
                    if(l < r){
                        rh = height[r];
                    }
                } else {
                    //move l
                    while(l < r && height[l] <= lh){
                        l++;
                    } 
                    if(l < r){
                        lh = height[l];
                    }
                }
            }
            return max;
        }
    }


  • 相关阅读:
    透过书本了解HTML5
    Seam性能讨论
    Maven依赖管理
    Tapestry
    为HTML5的未来制定学习计划
    后缀数组
    HDU 1042(大数)
    教你理解复杂的C/C++声明
    编程修养
    平衡二叉树
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4272618.html
Copyright © 2020-2023  润新知