我正在尝试解决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)
答案 0 :(得分:0)
一旦if s[0] and s[-1] < max(s[1:-1]):
True
与s[0]
不同,即为0
。参见How to test multiple variables against a value?:
您可以将比较固定为
if s[0] < max(s[1:-1]) and s[-1] < max(s[1:-1]):
但这对于您要执行的任务没有任何意义:您不必检查第一个和最后一个数字是否小于中间数字的最大高度。
给出
的数据20, 10, 15, 10, 50, 70
您的代码报告了正确的数字-但事情错了-计数的峰值是10, 15 ,10。 50 (最大值[1:-1])不是峰值!
此外,您不使用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)}')