zoukankan      html  css  js  c++  java
  • leetcode 【 Container With Most Water 】python 实现

    题目

    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.

    代码:oj测试通过 Runtime: 132 ms

     1 class Solution:
     2     # @return an integer
     3     def maxArea(self, height):
     4         # none case or one element case
     5         if height is None or len(height)<2:
     6             return 0
     7         # left point and right point
     8         left = 0
     9         right = len(height)-1
    10         max_container = 0
    11         while left<right :
    12             curr_container = min(height[left],height[right]) * (right-left)
    13             max_container = max(curr_container,max_container)
    14             if height[left]>height[right]:
    15                 right = right-1
    16             else:
    17                 left = left+1
    18         return max_container

    思路

    数组前后双指针技巧。

    有点儿像动态规划。

    两个指针一左一右left right

    面积为:min(height[left],height[right])*(right-left)

    指针迭代条件为:哪边的指针所指位置的高度小,就从哪边往中间移动。每一步更新一次max_container的值。

    为什么哪边的指针所指的位置高度小就从哪边往中间移动呢?能装多少水是有较短的那边决定的,因此如果寻求装更多的水,则应该优先从较短的一侧开始求变。

    这样一来,每一次迭代后,都保证max_container保存了当前以及之前的可能最大蓄水量。

  • 相关阅读:
    Android studio 中国的垃圾问题解决
    实现一个简单的boot
    代理下载android4.4源代码
    《程序员在第一季度追姐姐的书》——提升自己的形象气质
    第46周四
    Spring单例与线程安全小结
    2014第46周二
    第46周一
    第45周日
    第45周六
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4264676.html
Copyright © 2011-2022 走看看