首页 > 后端开发 > C++ > 正文

用C++编写一个程序,找出数组中所有元素对之间第k小的差值

WBOY
发布: 2023-09-05 17:25:06
转载
1107人浏览过

用c++编写一个程序,找出数组中所有元素对之间第k小的差值

假设我们有一个包含多个整数的列表。我们必须找出数组中每对值之间的差异,并找出第 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 := 0
  • ri := 输入的最后一个元素 - 输入的第一项
  • while le
  • mid := (le + ri) / 2
  • tmp := 0
  • lp := 0
  • 用于初始化 i := 1 ,当 i
  • while input[i] - input[lp] > mid,执行 −
    • lp := lp + 1
  • tmp := tmp + i - lp
  • 如果tmp >= k,则 -
    • ri := mid
  • 否则
    • le := mid + 1
  • 返回le
  • 示例

    令我们看下面的实现来更好地理解 -

    #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++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载
    相关标签:
    来源:tutorialspoint网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习
    PHP中文网抖音号
    发现有趣的

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号