所以我发现了一个' Stream'来自输入的数字。输入长度从1到4999999不等。(鉴于它是一个奇数)。
时间限制为5秒。
我目前的代码应该是直截了当的:
import statistics
array = []
n = int(input())
for _ in range(n):
array.append(int(input()))
print (int(statistics.median(array)))
但我在某些情况下得到了TLE。问题应该是因为循环for _ in range(n)
太慢了。
有没有办法既可以加快阅读输入过程,也可以在读取常量输入时计算中位数?
(我知道问题出在循环中只是在循环后放置print ('Done')
...或者是因为追加了吗?)
答案 0 :(得分:1)
我发现以下内容比input/append
快得多:
import statistics
from sys import stdin
n = int(stdin.readline()) # unused below, stdin terminates on EOF
l = list(map(int, stdin.read().split())) # read rest of file in one gulp, split & map it
print(int(statistics.median(l)))
答案 1 :(得分:0)
你可以做几件事:
简化输入:
numbers = sorted(map(int, (input() for _ in range(int(input()))))
自己计算中位数:
def median(nums:list) :
l = len(nums)
if l%2 == 1:
return nums[l//2]
else:
return sum(nums[l//2-1:l//2+1])/2
总计:
print(median(sorted(map(int, (input() for _ in range(int(input())))))))
答案 2 :(得分:0)
虽然这不是一个标准答案,但我只是转而使用C ++并轻松通过。
(是的,我在30分钟内学到了它。)
In [8]: df = pd.read_clipboard(sep=';') # should be same like pd.read_csv
In [9]: df.set_index("Date")[['Open', 'High', 'Low', 'Last Close', 'Total Volume']]
Out[9]:
Open High Low Last Close Total Volume
Date
02/10/2017 29.345 29.375 29.005 29.105 1,106,900
02/13/2017 29.100 30.050 29.100 29.870 1,715,810
02/14/2017 29.710 30.150 29.665 30.100 1,225,914
02/15/2017 30.190 30.300 29.865 29.950 1,406,422
02/16/2017 29.815 29.940 29.585 29.770 1,245,004
答案 3 :(得分:0)
使用numpy可以在python中实现更高效的实现 和发电机:
import numpy as np
n = int(input())
array = np.fromiter((int(input()) for _ in range(n)), np.int32)
print(int(np.median(array)))
但是,由于我无法通过在线评判来检查这个新解决方案,因此不清楚它是否足够快。