美团 回转寿司 Python (未通过,但是也不知道哪错了)

问题

3.24:不知道自己哪里写错了,只是通过了 3/10。还很自信的觉得自己没写错 >_<
麻烦走过路过的大佬帮忙瞅下,看看还有啥其他的测试用例,边界条件是我没想到的

题目

小美请小团吃回转寿司。转盘上有N盘寿司围成一圈,第1盘与第2盘相邻,第2盘与第3盘相邻,…,第N-1盘与第N盘相邻,第N盘与第1盘相邻。小团认为第i盘寿司的美味值为A[i](可能是负值,如果小团讨厌这盘寿司)。现在,小团要在转盘上选出连续的若干盘寿司,使得这些寿司的美味值之和最大(允许不选任何寿司,此时美味值总和为0)。
输入描述

第一行输入一个整数T(1<=T<=10),表示数据组数。
每组数据占两行,第一行输入一个整数N(1<=N<=10^5);
第二行输入N个由空格隔开的整数,表示A[1]到A[N](-10^4<=A[i]<=10^4)。

输出描述

每组数据输出占一行,输出一个整数,表示连续若干盘寿司的美味值之和的最大值。

输入测试用例

1
4
3 -2 4 -1

输出测试用例

6

Python 代码

import sys
if __name__ == '__main__':
    T = int(input())
    for _ in range(T):
        N = int(input())
        A = list(map(int, input().split()))
        prefix = [0]
        prefix_sum = 0
        A.extend(A)
        for i in range(2*N):
            prefix_sum += A[i]
            prefix.append(prefix_sum)
        # print(prefix)
        min_prefix, min_idx, ans = sys.maxsize, 0, 0
        for i in range(1, len(prefix)):
            if i - min_idx > N:
                # print(i, " min_idx: ", min_idx)
                break
            ans = max(ans, prefix[i] - min_prefix)
            if prefix[i] <= min_prefix:
                min_prefix = prefix[i]
                min_idx = i
        print(ans)

猜你喜欢

转载自blog.csdn.net/thwwu/article/details/123720510
今日推荐