我有一大堆整数,它们的值只能增长(我正在计算)。
出于效率原因,我单独保留一个max值,该值在需要时随时更新:
// when increasing the i'th count
coll[i] += 1;
// check whether also to update the max:
if(coll[i] > max){
max = coll[i];
}
什么样的算法可以有效地“跟踪”集合的最小值?
我的意思是,尽可能少地迭代整个集合,并保持内存占用量小。(后者的重要性确实不如前者)
我正在使用java:所以如果jre中已经有了上述算法,我欢迎您的参考。
最佳答案
为每个值保留一个计数哈希表,然后更新它,如果哈希表中不再有等于min
的值,则更新最小值。
// when increasing the i'th count
coll[i] += 1;
--hashTable[coll[i] - 1];
++hashTable[coll[i]];
// check whether also to update the max:
if(coll[i] > max){
max = coll[i];
}
// check whether to update the min:
if(min == coll[i] - 1 && hashTable[coll[i] - 1] == 0){
min = coll[i];
}
如果您能够提供内存(如果您的值足够小)或实际的Hashtable,哈希表可以是一个简单的数组。
这只需要在集合上进行初始迭代来构建哈希表然后不再执行迭代。
关于java - 遵循只能增加的一组值中的最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28539380/