我正在尝试解决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表示它超出了时间并且需要优化。
有人可以帮助,如何优化它?
答案 0 :(得分: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
答案 1 :(得分:2)
应该支持像readlines这样的东西。我刚刚做了一个尝试,并将其作为一个公认的解决方案:
import sys
print '\n'.join(map(str, sorted(map(int, sys.stdin.read().split()[1:]))))
不漂亮但功能齐全。在我弄清楚你必须跳过第一个数字之前,我先找了一点,调试对这个系统来说有点烦人;)