2

我正在尝试解决 Codechef 问题(Turbo Sort)。问题是

给定数字列表,您将按非降序对它们进行排序。

输入

t – 列表中的数字数量,然后 t 行跟随 [t <= 10^6]。

每行包含一个整数:N [0 <= N <= 10^6]

输出

以非递减顺序输出给定数字。

例子

输入:

5 5 3 6 7 1

输出:

1 3 5 6 7

我的解决方案是:

l = []
t = input()
MAX = 10**6
while t <= MAX and t != 0:
    n = input()
    l.append(n)
    t = t - 1
st = sorted(l)
for x in st:
    print x

挑战是这个程序应该在 5 秒内运行。当我提交文件时,codechef 说它超出了时间,需要优化。

有人可以帮忙,如何优化它?

4

2 回答 2

3

我接受的解决方案:

import sys
from itertools import imap
T = int(raw_input())
lines = sys.stdin.readlines()
lis = imap(str, sorted(imap(int, lines)))
print "\n".join(lis)

可读版本(接受的解决方案):

import sys
T = raw_input()           
lines = sys.stdin.readlines() #fetch all lines from the STDIN
lines.sort(key=int)           #sort the list in-place(faster than sorted) 
print "\n".join(lines)        #use `str.join` instead of a for-loop
于 2013-07-02T16:21:59.980 回答
2

应该支持像 readlines 这样的东西。我刚刚尝试过并将其作为可接受的解决方案:

import sys
print '\n'.join(map(str, sorted(map(int, sys.stdin.read().split()[1:]))))

不漂亮但实用。在我发现你必须跳过第一个数字之前花了我一点时间,这个系统的调试有点烦人;)

于 2013-07-02T17:08:08.450 回答