• 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保存了当前以及之前的可能最大蓄水量。

  • 相关阅读:
    java中变量命名和引用变量的一个坑
    java(2)之前往对象村
    java的print,printf,println以及输入
    HTML学习开篇
    今后的学习路径
    offline .net3.5
    java
    两个经典的Oracle触发器示例(轉)
    listview1
    Delphi连接Oracle控件ODAC的安装及使用(轉載)
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4264676.html
Copyright © 2020-2023  润新知