6
|
Saurav Sahu · 技术社区 · 8 年前 |
1
14
你不必担心
还有一个区别是:
因此,如果你需要找到一个范围的最小值和最大值,那么你应该使用
现在,该对的第一个元素存储在
|
2
7
其他答案都很好。我想补充一点关于如何
如果我们考虑一个简单的实现,您将保持最大值和最小值(及其对应的迭代器),并简单地遍历范围,将每个值与最小值和最大值进行比较,并根据需要进行调整。然而,这将提供总共2N个比较;虽然它可能比遍历列表两次更好(由于更好地使用了局部性),但该规范要求(大致)3/2N比较。那怎么可能呢?
因此,每对需要三个比较-相互比较,然后最高值与当前最大值比较,最低值与当前最小值比较。这将所需的比较次数减少到3/2 N!
然而,根据下面的评论,应该注意的是,当使用比较便宜的类型(或比较器)时,这种“改进的”算法在现代处理器上往往比原始版本产生更差的性能,特别是在
理论上,我认为C++库实现可以为
考虑到以上所有内容,一个简单的测试用例(如下)显示了一个有趣的结果:对于随机排序的数据,
使用
注意:
代码:
|
3
6
对您只在范围内迭代一次,而不是重复两次。 |
4
3
忽略
还值得注意的是:
|
William · 在Python数组中使用max()和min()失败 7 年前 |
user8962187 · 从python上的列表中获取索引[重复] 7 年前 |
trayvou jba · 尝试添加包括本机min函数的计算值 7 年前 |
SystemX17 · C#从4个最大/最小选择中找到2个最强值 7 年前 |
Kevin Cruijssen · 再现行为最大值和最小值 7 年前 |