[英]Optimising code to make execution quicker
问题陈述:-我在编码竞赛中遇到的问题是在数组中给出了queryIndex。 给定一个数组。 我们必须使用queryIndexArray获取每个索引并在主数组中执行以下操作:
for k = queryIndex[i] + 1 to array.length
if (array[k] < array[queryIndex[i]]){
array[queryIndex[i]] = 0
}
我已经编写了JavaScript代码,但问题是运行10.03秒需要10秒,准确地说,由于问题是基于时间的,我如何将运行时间降低到2秒
我使用的方法:-
let arrayLength = 5 ;
let array = [4,3,4,2,1]
let queryIndex = [3,2]
let queryIndexLength = 2
for (let i =0 ; i <queryIndexLength ; i ++ ){
let forwardIndex = queryIndex[i] + 1
for (let j = forwardIndex ; j< arrayLength ; j++){
if (array[forwardIndex] < array[j] ){
array[j] = 0
}
}
}
该代码通过了测试用例,但问题是执行需要10秒,而该问题的运行时间仅为2秒。 我是否应该使用其他数据结构(如集合)? 由于阵列需要更长的时间,因此请提出解决方案?
代码简述:-
这只是一个示例代码,原始测试用例的值对于数组和queryIndex来说足够大,因此花费了10.03秒
方法中的问题:-时间复杂度大的输入要花10秒,我想在2秒以内得到它,因此如何实现为o(n)^ 2解决方案。
您可以使用以下算法在O(array.length + queryIndex.length*log(queryIndex.length))
执行此操作:
sort(queryIndex)
minQuery = Infinity
foreach i in queryIndex:
minQuery = minimum(array[queryIndex[i]], minQuery)
foreach j of (queryIndex[i] .. queryIndex[i+1]):
if array[j] > minQuery
array[j] = 0
无需多次遍历大数组的某些部分(从每个queryIndex到数组的末尾),以将每个元素与queryIndex的值进行比较:条件和动作每次看起来都相同。 您只需要找到将匹配在多次运行中已匹配的所有元素的条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.