【发布时间】:2014-05-06 20:52:37
【问题描述】:
我的一个朋友在采访中被问到这个问题:
您有两个整数数据数组(例如 {5, 6, 26, 13, 2}),阈值 (例如 {19, 2, 6 3})。你有 int K。找到最小的阈值 >= K 个数据值的值
我想出了这个伪代码:
int[] data
int[] thresholds
int k
//mergesort lowest to highest
sort(data)//O(nlogn)
sort(thresholds)//O(nlogn)
for(i: 0->thresholds.size-1)//O(n)
if(thresholds[i] >= data[k])
return thresholds[i]
throw exception("no value found that meets condition")
但是,我的朋友(他也提出了类似的解决方案)被告知该解决方案不是最有效的解决方案(就运行时间而言)。我似乎找不到比这更好的解决方案
编辑:threshold 中的最小值必须是>=,而不是k 数字 值data。这意味着输出值必须与k 的data 的不同索引进行比较。
【问题讨论】:
-
这个解决方案“不是最有效的”是因为它的 big-O 高于其他解决方案,还是仅仅因为它可以优化,同时仍然具有相同的 big-哦?
-
我认为你在这里误解了一些东西:如果阈值是大于或等于
data中k值的最小的,这意味着它大于或等于第k个data排序顺序中的最小值。因此,您正在寻找大于data中的 k 最小元素的最小阈值。
标签: algorithm