zoukankan      html  css  js  c++  java
  • 盛最多水的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (iai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (iai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

    说明:你不能倾斜容器,且 n 的值至少为 2。

    1. 题目需要理解的一点,垂直线的宽度忽略不计,也就是说width = n -1 

    2. 一开始并没有什么好的方法,后来才意识到其实这题的关键在于隐藏信息

    class Solution(object):
        def maxArea(self, height):
            """
            :type height: List[int]
            :rtype: int
            """
            max_area = 0
            length = len(height)
            x_tmp = -1
            y_tmp = -1
            for i in range(length-1):
                x = height[i]
                if x>x_tmp:
                    y_list = [i for i in range(i+1,length)][::-1]
                    for j in y_list:
                        y = height[j]
                        if y>y_tmp:
                            area = min(height[i],height[j])*(j-i)
                            if area>max_area:
                                max_area = area
                        else:
                            continue
                else:
                    continue
            return max_area
    

     上述代码先从两端开始,因为宽度是逐渐减小的,因此必须使得高度是增加的,因此仅在后者高度大于前者,才计算area。

    然而时间复杂度还是O(n*n),是不符合题目要求的。

    正解:

    其实是我们忽略了一个隐藏条件,因为根据短板效应,实际上我们需要增大的是短的那块板,因此还可以提高速度。

    class Solution(object):
        def maxArea(self, height):
            """
            :type height: List[int]
            :rtype: int
            """
            
            max_area = 0
            
            left = 0
           
            right = len(height) - 1
            
            while right > left:
                max_area = max(max_area, min(height[left], height[right]) * (right - left))     
                if height[right] > height[left]:
                    left += 1
                else:
                    right -= 1
            return max_area
    
  • 相关阅读:
    2019年度SAP项目实践计划
    实现祖国统一其实并不难
    2018年终总结之摄影作品展
    2018年终总结之访问量较大的原创文章
    2018年终总结之AI领域开源框架汇总
    2018 AI产业界大盘点
    为什么我觉得Python烂的要死?
    SAP MM 根据采购订单反查采购申请?
    2018-8-10-win10-uwp-ApplicationView
    2018-8-10-WPF-播放-gif
  • 原文地址:https://www.cnblogs.com/zenan/p/10019171.html
Copyright © 2011-2022 走看看