数组中的第K个和
Kth sum in an array
我有一个有n个元素的数组,我需要计算两个元素对(array[I]+array[j])的所有n*n和。所有和都按升序排列。我需要找到Kth sum
例如:
array[]={3,4,5}
所有和:{(3+3),(3+4),(4+3)
K=6
我需要找到第K个和的值(在这种情况下,第6个和是4+4,我将返回8);
解决方案可能是非常优化的
这是我的解决方案;它不是最佳的:
for(i=0;i<n;i++)
fin>>a[i];
qsort(a, n, sizeof(int), int_cmp);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
sum[k]=a[i]+a[j];
if(i!=j)
sum[++k]=a[i]+a[j];
k++;
}
qsort(sum, n*n, sizeof(int), int_cmp);
cout<<sum[nrs-1];
我在谷歌面试中看到过类似的问题,他们使用两个排序的数组而不是一个,但解决方案有效。这里可以给出一个将在CCD_ 1中工作的优化。在这种情况下,要找到最大值,必须计算出所有小于它的值,即让i,j
是最大值,在5,5
的情况下,5,5
是最大值。必须同时计算4,5
和5,4
。即i-1,j
和i,j-1
。因此,工作代码是在c++中使用heap
,它是O(klogk)
0。代码如下
#include <iostream>
#include <queue>
using namespace std;
for(i=0;i<n;i++)
fin>>a[i];
qsort(a, n, sizeof(int), int_cmp);
std::priority_queue<int > heap;
heap.add(pair(n-1, n-1)); // biggest pair n=array size
// remove max k-1 times
for (int i = 0; i < k - 1; ++i) {
// get max and remove it from the heap
max = heap.pop();
// add next candidates
heap.push(pair(max.i - 1, max.j));
heap.push(pair(max.i, max.j - 1));
}
// get k-th maximum element
max = heap.pop();
maxVal = a[max.i] + a[max.j];
现在这个已经优化到O(k.logk)
了,还有一个给出了O(k)
。你可以在这里找到它。O(k)中的第k个和
相关文章:
- 如何在C++中比较两个char数组
- 为什么 2 个相同数组的元素彼此相等
- 我如何根据 c++ 中的行合并两个 2D 数组
- C++ 2 个指针数组初始化 C2440
- 如何通过组合多个字符数组来创建字符数组?
- C++函数返回两个 char 数组的相同索引元素
- 比较嵌套 for 循环中的两个 wchar 数组?
- 循环访问 C++ 个字符数组的位
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 返回多个 py::数组而不在 pybind11 中复制
- 比较两个字符串数组,我的控制台应用程序"stops responding"
- 在一个变量中存储多个 2D 数组
- 代码未C++打印第二个字符数组
- 比较 C++ 字符串打印中的两个整数数组
- 分配两个二元数组
- C 我将如何使用排序对这两个维数组进行排序
- 如何从.txt文件中读取多个2D数组,而无需每个之间的新线
- 如何修复合并两个C++数组时'Invalid Pointer'
- 如何使用C Win32 API设置和获取多个值(数组值)到Active Directory中的单个属性
- 使用函数输入 1 个 int 和 1 个字符串数组并循环