zoukankan      html  css  js  c++  java
  • 每日一题20201116(11. 盛最多水的容器)

    11. 盛最多水的容器

    image.png

    思路

    这题有点像接雨水,但是比接雨水简单的是,这个中间是没有木棍的,所以很容易计算出2根棍子能装多少水。
    
    根据木桶效应,容器装水多少是根据最短那块来决定的。
    
    本题用双指针的方式,首先比较两侧木板较短的那块板子,记录下值,如果右侧小则右侧的指针移动,为啥呢,因为右侧可能会有更高的板子出现。如果这时候右侧的更低了呢?没关系,我们记录了每一次的最大值。
    
    class Solution:
        def maxArea(self, height: List[int]) -> int:
            i, j = 0, len(height)-1
            max_value = 0
            while i < j:
                # 最大值等于 (j-i) * 短板的高度 与 目前的最大值的比较
                max_value = max(max_value, min(height[i], height[j]) * (j-i))
                if height[i] < height[j]:
                    i += 1
                else:
                    j -= 1
            return max_value
    
    

    感觉max和min耗时很久,改造了一下:

    class Solution:
        def maxArea(self, height: List[int]) -> int:
            i, j = 0, len(height)-1
            max_value = 0
            while i < j:
                now_value = height[j] * (j-i) if height[j] < height[i] else height[i] * (j-i)
                if now_value > max_value:
                    max_value = now_value   
                if height[i] < height[j]:
                    i += 1
                else:
                    j -= 1
            return max_value
    

    image.png

  • 相关阅读:
    OpenCV 之 图像平滑
    C++11 之 nullptr
    C++11 之 scoped enum
    C++ 之 常量成员函数
    德国的挑战
    OpenCV 之 直方图处理
    OpenCV 之 霍夫变换
    排序算法之——归并排序(两种方法及其优化)
    排序算法之——快速排序(剖析)
    排序算法之——桶排序
  • 原文地址:https://www.cnblogs.com/we8fans/p/14012945.html
Copyright © 2011-2022 走看看