zoukankan      html  css  js  c++  java
  • 11. Container With Most Water

    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.

    O(n2)方法:

    class Solution(object):
        def maxArea_stupid(self, height):
            max_area = 0
            for i, vi in enumerate(height):
                for j, vj in enumerate(height):
                    area = abs(i - j) * min(vi, vj)
                    max_area = max(area, max_area)
            return max_area

    此方法直接Time Limit Exceeded没有通过。

    O(n)方法:

    class Solution(object):
        def maxArea(self, height):
            max_area = 0; i = 0; j = len(height) - 1
            while i < j:
                max_area = max(max_area, (j - i) * min(height[i], height[j]))
                if height[i] < height[j]:
                    i += 1
                else:
                    j -= 1
            return max_area

    此方法AC。

    思路:

    ①: 假设i,j为当前最大面积对应的坐标,那么i左边一定不会有比i更高的线,否则违背了最大面积的假设;同理j也是。

    ②: 所以取得更大面积的坐标一定在[i, j]的内部,从两头往中间靠拢,优先收缩小的。

  • 相关阅读:
    算法之冒泡排序
    实现秒杀的几个想法(续)
    乐观锁
    wifi-sdio接口
    解压vmlinuz和解压initrd(initramfs)
    supplicant
    wpa_supplicant测试
    qu
    netlink
    wpa_supplicant安装
  • 原文地址:https://www.cnblogs.com/zhuifengjingling/p/5199151.html
Copyright © 2011-2022 走看看