`
economist
  • 浏览: 6015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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.

实现:

package array;

public class MaxAreaDemo {

    public static void main(String[] args) {
        int[] heights = {1, 2, 2, 3, 4, 1, 2};
        System.out.println(getMaxArea(heights));
    }

    public static int getMaxArea(int[] heights) {
        if(heights == null || heights.length == 0) {
            return 0;
        }
        int left = 0;
        int right = heights.length -1;
        int max_area = 0;
        while(left < right) {
            max_area = Math.max(max_area, (right - left) * Math.min(heights[left], heights[right]));
            if(heights[left] < heights[right]) {
                left++;
            } else {
                right--;
            }
        }
        return max_area;
    }
}

 

def get_max_area(height):
    if not height:
        return 0
    max_area = 0
    left, right = 0, len(height) - 1
    while left < right:
        max_area = max(max_area, (right - left) * min(height[left], height[right]))
        if height[left] < height[right]:
            left += 1
        else:
            right -= 1
    return max_area

height = [1, 2, 2, 3, 4, 1, 2]
print get_max_area(height)

 贴一个有点差别的实现

def get_max_area(height):
    if not height:
        return 0
    max_area = 0
    left, right = 0, len(height) - 1
    while left < right:
        max_area = max(max_area, (right - left) * min(height[left], height[right]))
        if height[left] < height[right]:
            i = left
            while i < right and height[i] <= height[left]:
                i += 1
            left = i
        else:
            i = right
            while i > left and height[i] <= height[right]:
                i -= 1
            right = i
    return max_area

height = [1, 2, 2, 3, 4, 1, 2]
print get_max_area(height)

 

分享到:
评论

相关推荐

    [LeetCode]Container With Most Water(中期有问题仅供参考)1

    【LeetCode】Container With Most Water 是一道经典的计算机算法题,主要涉及到数组操作和动态规划的优化技巧。题目要求在给定的一组非负整数坐标中找到两条线,使得它们与x轴形成的容器能容纳最多的水。问题的核心...

    [LeetCode] Container With Most Water(正确的算法)1

    在LeetCode上的问题"Container With Most Water"是一个经典的计算机科学问题,主要涉及到算法设计和优化。这个问题要求我们找到两个垂直线,它们与x轴形成一个容器,使得该容器能容纳最多的水。这个问题可以看作是二...

    js代码-11. Container with Most Water

    Container with Most Water" 是一个编程问题,源自LeetCode等在线编程平台的挑战题目。这个题目要求我们用JavaScript编写算法来解决一个关于找到两个竖直木板形成的容器能容纳的最大水量的问题。 【描述】在实际的...

    程序员面试宝典LeetCode刷题手册

    11. Container With Most Water 13. Roman to Integer 15. 3Sum 16. 3Sum Closest 17. Letter Combinations of a Phone Number 18. 4Sum 19. Remove Nth Node From End of List 20. Valid Parentheses 21. Merge Two...

    c语言-leetcode 0011-container-with-most-water.zip

    c c语言_leetcode 0011_container_with_most_water.zip

    java-leetcode题解之011-Container-With-Most-Water

    java入门 java_leetcode题解之011_Container_With_Most_Water

    js-leetcode题解之11-container-with-most-water.js

    js js_leetcode题解之11-container-with-most-water.js

    C语言-leetcode题解之11-container-with-most-water.c

    c语言入门 C语言_leetcode题解之11-container-with-most-water.c

    java-leetcode面试题解双指针之第11题盛最多水的容器.zip

    本题是LeetCode中的第11题,名为“盛最多水的容器”(Container With Most Water),这是一道关于优化二维数组中两个元素乘积最大值的经典问题。 问题描述如下:给定一个包含n个非负整数的数组height,数组中元素的...

    c++-c++编程基础之leetcode题解第11题盛最多水的容器.zip

    第11题是“盛最多水的容器”(Container With Most Water),这是一个经典的计算机科学问题,主要考察了双指针技巧和二维数组的操作。接下来,我们将深入探讨这个问题以及如何用C++解决它。 **问题描述:** 给定一...

    题目列表1

    10. **Container With Most Water** (最大宽度容器/双指针) - 题目描述:找到两个非降序数组中最大的面积矩形。 - 解决方案:使用双指针法,每次移动较短边的指针。 以上只列举了部分题目,LeetCode中的其他问题...

    leetcode1-200题源码(c++)

    8. 题目11:Container With Most Water (最大矩形面积) 这是一道几何问题,可以通过动态规划或双指针法找到能容纳最多水的容器。 9. 题目16:3Sum Closest (最接近的三数之和) 给定一个包含n个整数的数组nums,找...

    leetcode刷题记录,包含代码和思路讲解,非常详细

    11._CONTAINER WITH MOST WATER_(容器最大水量) 题目描述:给定一个整数数组,找到两个元素,使得它们之间的距离乘以它们之间的最小值等于最大水量。 知识点:数组、双指针 思路:使用双指针,逐步比较数组元素,...

    LeetCode前400题Java精美版

    11. **Container With Most Water** (Medium): 求两个非降序数组中的最大面积水杯。双指针法是常用的解决策略。 12. **Integer to Roman** (Medium): 整数转换为罗马数字。需要对罗马数字系统有深入理解,并建立...

    Coding Interview in Java

    4. 数组操作相关问题:如Remove Duplicates from Sorted Array(删除排序数组中的重复项),Move Zeroes(移动零),Container With Most Water(最多水的容器)等,考察对数组操作的掌握。 5. 字符串处理问题:...

    javalruleetcode-LeetCode:LeetCode算法问题

    Container With Most Water LeetCode 19 Remove Nth Node From End of List LeetCode 42 Trapping Rain Water LeetCode 61 RotateList LeetCode 75 Sort Colors LeetCode 125 Valid Palindrome LeetCode 167 Two Sum...

    Amazon近半年电面题.pdf

    10. ContainerWithMostWater: 给定一个数组,其中每个元素代表一个宽度为1的柱子,要求使用这些柱子构成的容器能装下最多水,解决这个问题通常需要双指针方法。 11. IntegertoRoman: 需要将整数转换为罗马数字,...

    LeetCode答案大全

    11. Container With Most Water:给定一个包含n个非负整数的数组,设计一个算法找出其中两个数,使得它们与x轴构成的容器可以容纳最多的水。 12. Integer to Roman:将整数转换为罗马数字。 13. Roman to Integer...

Global site tag (gtag.js) - Google Analytics