鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 266

[复制链接]
发表于 2019-11-2 08:13:12 | 显示全部楼层    本楼为最佳答案   
答题之前,先感谢一下抽时间出题、判题的版主,以及提供过题目的鱼友们
原来“不重叠”是指“两个切片的索引没有交集”
from time import perf_counter  # 单位为秒

def cal_time(func):
    """ 懒人测时间 """
    def inn(nums):
        start = perf_counter()
        res = func(nums)
        stop = perf_counter()
        print(f">>> result = {res}, run time: {(stop - start) * 1000}ms")
    return inn

@cal_time
def f266(nums):
    size = len(nums)
    if size < 2:
        return None  # 以防万一,就是不知道该返回 None 还是 False

    minL = [0] * size
    maxL = [0] * size
    minL[0] = maxL[0] = nums[0]
    for i in range(1, size):
        minL[i] = min(minL[i-1] + nums[i], nums[i])  # minL[i] 存放 nums[:i+1] 的切片的最小值,其余三个同理
        maxL[i] = max(maxL[i-1] + nums[i], nums[i])

    minR = [0] * size
    maxR = [0] * size
    minR[-1] = maxR[-1] = nums[-1]
    for i in range(size - 2, -1, -1):
        minR[i] = min(minR[i+1] + nums[i], nums[i])
        maxR[i] = max(maxR[i+1] + nums[i], nums[i])

    res = float("-inf")
    for i in range(size - 1):
        res = max(res, abs(maxL[i] - minR[i + 1]), abs(minL[i] - maxR[i + 1]))
    return res

if __name__ == "__main__":
    arr1 = [-2, 0, 0, 1, -1, -1]  # 3
    arr2 = [-5, -4]  # 1
    arr3 = [1, 2, -3, 1]  # 6

    f266(arr3)

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +3 收起 理由
zltzlt + 1 + 1 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 08:15:06 | 显示全部楼层
华一仙 发表于 2019-11-2 08:13
答题之前,先感谢一下抽时间出题、判题的版主,以及提供过题目的鱼友们
原来“不重叠”是指“两个切片的索 ...

恭喜通过!

执行用时:152 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 11:37:23 | 显示全部楼层
20楼题目预订成没成功?楼主,给个信儿啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 12:21:01 | 显示全部楼层
阴阳神万物主 发表于 2019-11-2 11:37
我20楼题目预订成没成功?楼主,给个信儿啊。

因为此题不是原创的,所以不成功。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 12:42:44 | 显示全部楼层
zltzlt 发表于 2019-11-2 12:21
因为此题不是原创的,所以不成功。

哦,好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-31 10:27:43 | 显示全部楼层
本帖最后由 kinkon 于 2019-12-31 10:47 编辑

只是为了完成作业,过程大概懂,速度应该算这个最优了
def fun266(n):
    max_pre = max_cur = float('-inf')
    min_pre = min_cur = float('+inf')
    for i in n:
        max_cur = max(max_cur + i, i)        
        max_pre = max(max_pre, max_cur)        
        min_cur = min(min_cur + i, i)
        min_pre = min(min_pre, min_cur)        
    return max_pre - min_pre
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-31 10:55:30 | 显示全部楼层
kinkon 发表于 2019-12-31 10:27
只是为了完成作业,过程大概懂,速度应该算这个最优了

检查居然是错误的,晕倒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 14:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表