容器盛水(Python)

容器盛水问题

http://www.nowcoder.com/questionTerminal/31c1aed01b394f0b8b7734de0324e00f

关于 题目

如此言简意赅的说明,看不懂题正常,他压根就是给有经验的人看的,题目同 Leetcode题 接雨水

关于 Python

受不了,直接 return 都会超时,也怪不得人家榜上的直接处理输入。
说真的,作为一个 Pythoner 我感觉我受到了歧视,也不是一个两个题这样,牛客就是视若无睹。

题解

这里用宫水三叶大佬那里学来的 面积差法 ,区区 6 行,真的乱杀

详情可以点超链接,直接送达题解处,有图且详细。
这里讲下主要思想,其实就是从左从右各扫描一次,然后减去矩形框的面积和柱子面积就是水的面积。即:

ps:这左扫描可以想象成一束光从左边平行打过来,光照不到的即为扫描面积;右扫描同理。

#
# max water
# @param arr int整型一维数组 the array
# @return long长整型
#
class Solution:
    def maxWater(self , arr ):
        s = lmax = rmax = 0
        for i in range(len(arr)):
            if lmax < arr[i]: lmax = arr[i]
            if rmax < arr[len(arr) - 1 - i]: rmax = arr[len(arr) - 1 - i]  # 左右扫描同时进行,就很妙
            s += lmax + rmax - arr[i]  # 每次循环也顺带处理柱子面积
        return s - lmax * len(arr)
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务