获得更大的数字

时间:2017-10-16 07:06:23

标签: python python-3.x

我正在研究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)

1 个答案:

答案 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个数字。如果您期望与输入值相比输出值的数量不同,请编辑您的问题。