c - 在未排序的数组中找到差值为输入值 'k' 的一对数字

标签 c arrays performance algorithm

如题所述,我想找到差为K的元素对

example k=4 and a[]={7 ,6 23,19,10,11,9,3,15}
output should be :
   7,11
   7,3
   6,10
   19,23
   15,19
   15,11

我已阅读 SO“find pair of numbers in array that add to given sum”中的先前帖子

为了找到一个高效的解决方案,需要多少时间?时间复杂度是O(nlogn)还是O(n)? 我试图通过分而治之的技术来做到这一点,但我没有得到任何退出条件的线索......

如果一个有效的解决方案包括使用两个指针对输入数组进行排序和操作元素,那么我认为我应该采用最少的 O(nlogn)...

是否有任何与数学相关的技术可以在 O(n) 中带来解决方案。任何帮助表示赞赏..

最佳答案

您可以使用哈希表在 O(n) 中完成。将所有数字放入 O(n) 的哈希中,然后再次遍历所有数字以寻找 number[i]+k。哈希表在 O(1) 中返回"is"或“否”,你需要遍历所有数字,所以总数是 O(n)。任何具有 O(1) 设置和 O(1) 检查时间的集合结构都可以代替哈希表工作。

关于c - 在未排序的数组中找到差值为输入值 'k' 的一对数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10450462/

相关文章:

c - 连接到 MQTT Broker 时出现 SSL 错误

c - 如何使用 fread 读取二进制文件?

android - 出于性能目的,在 AppCompat 1.4.0 及更高版本的 textview 中禁用 emoji2

oracle - 为什么此查询比 ANSI JOIN 版本执行得更好?

mysql - Rows_sent : 12 Rows_examined: 549024 - how to optimize mySQL query?

c - 将 ptrdiff_t 的正值分配给 size_t 是否安全

在 C 中动态创建 Char* 数组

c - 如何使用 C 中的函数生成随机 float 数组

java - HashMap 元素的 ArrayList 到 Array

javascript - Google Scripts 从单元格中填充值数组及其位置