【发布时间】:2011-09-19 19:07:22
【问题描述】:
我有 2 个非常大的整数数组,比如 a[] 和 b[]。
我想从 a[] 和 b[] 中计算第二、第三和第四大数字的总和。
即两个数组中的第 2、第 3 和第 4 大数字......这是只有 3 个数字的总和。
请为这个问题提出一个好的算法。
考虑到算法的时间复杂度,请支持您的回答。
注意:编程语言不是问题。你可以假设 C
这是我针对这个问题开发的
算法:
1. 考虑数组 a[] 和 b[]。使用最大堆排序对 a[] 和 b[] 进行排序。
2. 两个数组现在都以最大元素作为两个数组中的根节点进行排序。比较 a[] 和 b[] 的根节点,取较大者,从数组中删除那个数。
3. 重新堆放具有最大元素的数组。
4. 现在将 a[] 和 b[] 的根节点添加到变量 sum 中。
5. 重新堆化 a[] 和 b[]。
6. 比较 a[] 和 b[] 的根节点,以较大者相加。
7. 打印变量总和。
【问题讨论】:
-
对这个问题有什么你的想法?
-
这看起来像是典型的给我一个答案-for-my-homework-question。
-
你可以创建另一个数组 c[],按降序排序,然后返回 c[1] + c[2] + c[3]。我认为没有比这更有效率的了。
-
您无需排序即可获得最高的 4 个数字
-
@TomalakGeret'kal 和 downvoters:这个问题是否因为它看起来像家庭作业或其他原因而收到与它一样多的反对票?如果是因为它看起来像家庭作业,我应该注意这种类型的问题不是一些深奥的,仅限于家庭作业类型的问题。我以前需要在专业环境中完成非常相似的任务。
标签: arrays algorithm data-structures