C++程序 计算最大总和的对数
给定一个数组arr[],计算出满足 arr[i] + arr[j] 最大且 i < j 的所有数对 (arr[i], arr[j]) 的数量。
示例 :
输入:arr [] = {1, 1, 1, 2, 2, 2}
输出:3
方法1(Naive)
通过一个循环 i 从 0 到 n(也就是数组长度),再通过另外一个循环 j 从 i+1 到 n,来查找所有可能的数对 (i, j)。
输出:
时间复杂度: O(n^2)
方法2(Efficient)
如果我们仔细观察,我们可以注意以下几点。
- 最大元素总是解决方案的一部分
- 如果最大元素出现不止一次,则结果为maxCount *(maxCount-1)/ 2。 我们基本上需要从maxCount( maxCount C 2 )中选择2个元素。
- 如果最大元素只出现一次,则结果等于第二大元素的计数。 我们可以将每个第二大和最大值配对形成一对。
输出结果:
时间复杂度: O(n)