假设我们有一个包含多个整数的列表。我们必须找出数组中每对值之间的差异,并找出第 k 个最小的差异数。索引从 0 开始,值 k 作为输入提供给我们。
因此,如果输入类似于numbers = {2, 6, 4, 8}, k = 2,那么输出将为 2。
两对之间的差异为 -
(2, 6) = 4
立即学习“C++免费学习笔记(深入)”;
(2, 4) = 2
(2, 8) = 6(6, 4) = 2
(6, 8) = 2
(4, 8) = 4
如果我们对这些值进行排序,它会变成 2, 2, 2, 4, 4, 6。第二个最小值是 2。(索引从 0)。
为了解决这个问题,我们将按照以下步骤操作 -
令我们看下面的实现来更好地理解 -
#include<bits/stdc++.h> using namespace std; int solve(vector<int>& input, int k) { k++; sort(input.begin(), input.end()); int le = 0; int ri = input.back() - input[0]; while (le < ri) { int mid = (le + ri) / 2; long long tmp = 0; int lp = 0; for (int i = 1; i < input.size(); i++) { while (input[i] - input[lp] > mid) lp++; tmp += i - lp; } if (tmp >= k) ri = mid; else le = mid + 1; } return le; } int main() { vector<int> numbers = {2, 6, 4, 8}; cout<< solve(numbers, 2) <<endl; return 0; }
vector<int> numbers = {2, 6, 4, 8}; cout<< solve(numbers, 2) <<endl;
2
以上就是用C++编写一个程序,找出数组中所有元素对之间第k小的差值的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号