• 盛最多水的容器


    给定 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
    
  • 相关阅读:
    SQL注入攻击
    Collections使用
    jquery实现table按时间排序
    浏览器存储及使用
    android实现屏幕旋转切换fragment
    安卓保存图片到图库demo总结
    android service基础
    正则表达式学习总结
    注解和枚举回顾
    Vue+Element项目日期选择器类型转化的问题
  • 原文地址:https://www.cnblogs.com/zenan/p/10019171.html
Copyright © 2020-2023  润新知