考虑一下:
i=raw_input()
y=int(i.split()[1])
r=raw_input()
for k in range(0,y):
if raw_input() in r: #####introduce binary search here
print "YES"
else:
print "NO"
这是一个非常简单的问题程序。程序输入如下:
3 1
34 54 36
54
YES
第一行是no of elements in an array
,no of queries
第二行是array
第三个是query
,它只是询问元素是否在array
中,如果是printYES
,则是NO
。
这是一个非常琐碎的问题程序。但是问题是,当我用10000
和10000
查询数组运行这个程序时,程序给出的时间限制超过了其中一个站点。你知道吗
问题是在这方面我可以优化什么?你知道吗
解决方案1,我认为是介绍binary search
,但这需要sorting
,这将再次采取nlogn
,即使使用最快的ie快速排序。你知道吗
有什么想法吗????你知道吗
如注释中所述,您可以通过首先在数字列表中创建一个
set
表单来显著缩短查找时间。但也要注意,您实际上是在字符串中搜索字符串!例如,在您的示例input34 54 36
中,它还将为input3
或4 5
报告YES
。您应该将两个输入都转换为int
。试试这个:还要注意的是,实际上并没有使用“数组中的元素数”输入;不确定这对放坡是否重要。。。你知道吗
我想你想要的是:
一个^{} 有
O(1)
成员资格测试,所以元素是可散列的(我选择将字符串直接放入集合中,但您可以将它们转换为整数,整数也是可散列的),并且顺序无关紧要,因此您可以获得显著的加速。你知道吗注意,
elements
的数目在Python中并不是很有用,因为您可以简单地接受任意输入并split
它。您可以省去针对len(array)
的测试,只需解包到_, queries
。你知道吗相关问题 更多 >
编程相关推荐