如何优化我现有的代码以解决2020年b左右的Google kickstart

时间:2020-05-16 08:12:16

标签: python

我正在尝试解决Google 2020年b轮启动的第一个问题。但是我遇到了重新运行时错误。有人可以帮我说吗?我吃错了什么?

问题问题

李已经计划了一次穿越瑞士山脉的自行车之旅。他的旅行包括N个检查站,按其访问顺序从1到N编号。第i个检查点的高度为Hi。

如果满足以下条件,则检查点为峰值:

它不是第一个检查点或第N个检查点,并且 检查点的高度严格大于紧接其之前的检查点和紧接其后的检查点。

请帮助李找出峰数。

输入

输入的第一行给出测试用例的数量,T。每个测试用例都从包含整数N的行开始。第二行包含N个整数。第i个整数是Hi。

输出

对于每个测试用例,输出一行包含Case #x:y,其中x是测试用例编号(从1开始),y是Li的自行车之旅中的高峰数量。

限制 时间限制:每个测试集10秒。 内存限制:1GB。 1≤T≤100。 1≤高≤100。

测试集1 3≤N≤5。

测试集2 3≤N≤100。

样品

输入

输出

4
3
10 20 14
4
7 7 7 7
5
10 90 20 90 10
3
10 3 10

案例1:1 情况2:0 案例3:2 情况4:0

在示例案例1中,第二个检查点是一个峰值。 在示例案例2中,没有峰。 在示例案例3中,第二和第四检查点是峰值。 在示例案例4中,没有峰。

我针对该问题的代码

for z in range(int(input())):
    no_range,s = input(),list(map(int,input().split()))
    if s[0] and s[-1] < max(s[1:-1]):
        print(f'Case #{z+1}:',s.count(max(s[1:-1])))
    else:print(f'Case #{z+1}:',0)

1 个答案:

答案 0 :(得分:0)

1。错误的if-condition:

if s[0] and s[-1] < max(s[1:-1]):
一旦Trues[0]不同,

即为0。参见How to test multiple variables against a value?

您可以将比较固定为

if s[0] < max(s[1:-1]) and s[-1] < max(s[1:-1]):

但这对于您要执行的任务没有任何意义:您不必检查第一个和最后一个数字是否小于中间数字的最大高度。

2。逻辑错误:

给出

的数据
20, 10, 15, 10, 50, 70

您的代码报告了正确的数字-但事情错了-计数的峰值是10, 15 ,10。 50 (最大值[1:-1])不是峰值!

3。错误计数:

此外,您不使用s.count(max(s[1:-1])))来检入三胞胎,而是计算最大值出现在列表中的频率。

修复:

for z in range(int(input())):
    _, s = input(), list(map(int,input().split())) 

    # create triplets of values - this will automagically get rid of the cornercases
    r = zip(s, s[1:], s[2:]) 

    # count how often the middle value is greater then the other 2 values
    print(f'Case #{z+1}: {sum(a<b>c for a,b,c in r)}')