我正在研究python的程序问题。这是个问题:
立即上一个更大的数字
N个数字作为输入传递给程序。该程序必须打印 前一个较大的数字。如果没有这么大的话 编号为该特定号码打印0。
注意:由于N可高达100000,因此请优化算法以避免 超时。
输入格式:第一行包含N.第二行包含N. 由空格分隔的数字。
输出格式:第一行包含N个数字,表示 此前较大的数字。
边界条件:2 <= N <= 100000
示例输入/输出1:输入:11 455 346 76 304 488 374 385 433 350 9 1000
输出:0 455 346 346 0 488 488 488 433 350 0
我解决了问题,我的代码在某个数字之前给出了最大的数字但不是之前的最大数字。
a = []
n = int(input())
number = input().split()
b = [number for number in number]
assert len(b)==n and n>=0
for i in range(0,len(b)):
a.append(b[0:i])
for j in range(0,len(b)):
if j==0:
print(0)
else:
m = int(max(a[j]))
if int(b[j])>m:
print(0)
else:
print(m)
答案 0 :(得分:0)
这可行(我将输入作为列表,您可以相应地修改您的代码)。也没有必要告诉脚本元素的数量,因为它可以在for循环中处理。
f = [455, 346, 76, 304, 488, 374, 385, 433, 350, 9, 1000]
def xyzzy(foo):
output = [0]
for i in range(1, len(foo)):
_tmp = [0] + [y for y in foo[0:i] if y > foo[i]]
output.append(_tmp[-1])
return output
print(xyzzy(f))
如果您希望将数组的长度作为列表中的第一个数字,那么只需在xyzzy
的for循环中忽略它,然后从两个范围开始。此处不需要它,但如果输入数据中存在,则可以轻松忽略它。
修改强>
这个答案是基于11不是输入数组的一部分的假设。如果它的一部分,你的输出对我来说似乎没有意义,因为你有12个输入元素和11个输出元素,但你描述了输入和输出格式的N个数字。如果您期望与输入值相比输出值的数量不同,请编辑您的问题。