假设我们有一个包含多个整数的列表。我们必须找出数组中每对值之间的差异,并找出第 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)。
为了解决这个问题,我们将按照以下步骤操作 –
将 k 增加 1对数组输入进行排序le := 0ri := 输入的最后一个元素 – 输入的第一项while le mid := (le + ri) / 2tmp := 0lp := 0用于初始化 i := 1 ,当 i while input[i] – input[lp] > mid,执行 −lp := lp + 1tmp := tmp + i – lp如果tmp >= k,则 -ri := mid否则le := mid + 1返回le
示例
令我们看下面的实现来更好地理解 –
#includeusing namespace std;int solve(vector& input, int k) {k++;sort(input.begin(), input.end());int le = 0;int ri = input.back() - input[0];while (le mid) lp++;tmp += i - lp;}if (tmp >= k)ri = mid;elsele = mid + 1;}return le;}int main() {vector numbers = {2, 6, 4, 8};cout输入
vector numbers = {2, 6, 4, 8};cout输出
2登录后复制
以上就是用C++编写一个程序,找出数组中所有元素对之间第k小的差值的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583609.html