zoukankan      html  css  js  c++  java
  • 数组_leetcode11

    # 首先,两条线条之间的容积为(x2 - x1) * min(height[x1],  height[x2])
    # 先取最左边直线和最右边直线,这种情况用(0, n-1)表示。
    # 下一步,考虑减少一个单位的宽度的情况,这时候有两种选择:(0, n-2)和(1, n-1)。
    # 对比这两种情况,如果线条的高度height[0] < height[n-1],也就说是第0根线条是“短板”,
    # 那么(0, n-2)的容积肯定会比(0, n-1)的容积小(前者容积为height[0]乘以宽度,
    # 后者的“短板”肯定小于或等于height[0],而宽度变小),因此(0, n-2)的情况可以不用比较,
    # 因此,下一步考虑(1, n-1)的情况,依次类推。时间复杂度为O(n)。

    # 其实就是剪支策略

    # 题解思路:
    # 本质上是一个(a,b)的组合问题 : n2 复杂度
    # 解空间树 的初值 (0,n), 初值搜索的关键
    # 最值问题 在 解空间树上 可以进行剪支 这是一个重要的启示 : 20190302 找工作期间

    class Solution(object):
    def maxArea(self, height):
    """
    :type height: List[int]
    :rtype: int
    """
    left = 0
    right = len(height)-1
    maxArea = -1
    while left < right:
    tempArea = (right -left) * min(height[left],height[right])
    maxArea = max(maxArea,tempArea)

    # 剪支
    if height[left] < height[right]:
    left += 1
    else:
    right -= 1

    return maxArea
  • 相关阅读:
    pymysql
    表查询
    元类
    外键约束
    Mysql知识
    C# windows服务的创建与调试
    JQuery随笔
    jQuery插件开发
    http post和put区别
    NPOI
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546842.html
Copyright © 2011-2022 走看看