博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法导论2.3-7
阅读量:6310 次
发布时间:2019-06-22

本文共 1935 字,大约阅读时间需要 6 分钟。

问题:请给出一个运行时间为O(n lgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,

判断S中是否存在有两个其和等于x的元素。

 

题目思路:先将集合S用归并排序排好序,因为归并排序的运行时间为O(n lgn);设置low和

high两个标志指向集合的两端,将两个点相加与x比较,如果偏小,则将low向后移,如果偏小

则将high向前移。

 

1 #include
2 #include
3 4 void Merge(int a[], int p, int q, int r); 5 void Merge_sort(int a[], int p, int r); 6 bool judge_sum(int a[], int p, int r, int x); 7 8 int main() 9 {10 int n;11 scanf("%d",&n);12 13 int a[n + 1];14 int x;15 16 for(int i = 1; i <= n; i++){17 scanf("%d",&a[i]);18 }19 scanf("%d",&x);20 Merge_sort(a, 1, n);21 if(judge_sum(a, 1, n, x)){22 printf("exist!");23 }24 else{25 printf("not exist!");26 }27 28 return 0; 29 }30 31 bool judge_sum(int a[], int p, int r, int x){ //判断集合中是否有两个数相加等于x 32 int low = p;33 int high = r;34 35 while(low <= high){36 if(a[low] + a[high] < x)37 low++;38 else if(a[low] + a[high] > x)39 high--;40 else41 return true;42 }43 44 return false;45 }46 47 void Merge(int a[], int p, int q, int r)48 {49 int n1 = q - p + 1;50 int n2 = r - q;51 int L[n1 + 1], R[n2 + 1];52 53 for(int i = 1; i <= n1; i++){54 L[i] = a[p + i - 1];55 }56 for(int i = 1; i <= n2; i++){57 R[i] = a[q + i];58 }59 60 L[n1 + 1] = INT_MAX;61 R[n2 + 1] = INT_MAX;62 63 int i = 1, j = 1;64 for(int k = p; k <= r; k++){65 if(L[i] <= R[j]){66 a[k] = L[i];67 i++; 68 }69 else{70 a[k] = R[j];71 j++;72 }73 }74 }75 76 void Merge_sort(int a[], int p, int r)77 {78 if(p < r){79 int q = (p + r) / 2;80 Merge_sort(a, p, q);81 Merge_sort(a, q+1, r);82 Merge(a, p, q, r);83 } 84 }

 

转载于:https://www.cnblogs.com/legoxz/p/8524887.html

你可能感兴趣的文章
oracle数据库密码过期报错
查看>>
修改mysql数据库的默认编码方式 .
查看>>
zip
查看>>
How to recover from root.sh on 11.2 Grid Infrastructure Failed
查看>>
rhel6下安装配置Squid过程
查看>>
《树莓派开发实战(第2版)》——1.1 选择树莓派型号
查看>>
在 Linux 下使用 fdisk 扩展分区容量
查看>>
结合AlphaGo算法和大数据的量化基本面分析法探讨
查看>>
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
《OpenACC并行编程实战》—— 导读
查看>>
机器学习:用初等数学解读逻辑回归
查看>>
如何在 Ubuntu 中管理和使用逻辑卷管理 LVM
查看>>
Oracle原厂老兵:从负面案例看Hint的最佳使用方式
查看>>
把自己Github上的代码添加Cocoapods支持
查看>>
C语言OJ项目参考(2493)四则运算
查看>>
零基础入门深度学习(二):神经网络和反向传播算法
查看>>
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
WKWebView代理方法解析
查看>>
IOS定位服务的应用
查看>>