给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法
2014-07-15 21:13
344 查看
思路:先从小到大排序,然后分别从头start到尾end的和判断下一步,如果大于X,尾部end--,如果小于X,头部start++
#include<iostream.h> void QuickSort(int S[],int start,int end) //快速排序 { if(start<end) { int tmp=S[start],i=start,j=end; while(i!=j) { while(tmp<=S[j]&&i<j) j--; while(tmp>=S[i]&&i<j) i++; if(i<j) { int temp; temp=S[i]; S[i]=S[j]; S[j]=temp; } } S[start]=S[i]; S[i]=tmp; QuickSort(S,start,i-1); QuickSort(S,i+1,end); } } bool SearchSumX(int S[],int X,int start,int end) { if(S[start]>=X) return false; int i=start,j=end; while(i<j) { if((S[i]+S[j]<X)&&i<j) i++; else if((S[i]+S[j]>X)&&i<j) j--; else if((S[i]+S[j]==X)&&i<j) return true; } if(i==j) return false; } void main() { int S[10]={12,4,9,18,10,1,25,11,6,7}; int X=20; QuickSort(S,0,sizeof(S)/sizeof(int)-1); if(SearchSumX(S,X,0,sizeof(S)/sizeof(int)-1)) cout<<"Exist!"<<endl; else cout<<"No Exist!"<<endl; }
相关文章推荐
- 1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法。
- 162 1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 程序员面试金典——解题总结: 9.17中等难题 17.12设计一个算法,找出数组中两数之和为指定值的所有整数对。
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 设计一个算法,判断串T是否是另一个串t的循环反转
- 判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 每天学习一算法系列(9) (输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果)
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 输入一个字符串,将其中连续的数字作为一个整数,一次存放到另一个整型数组,设计一个函数,把指向字符串的指针和指向整数的指针作为函数形参
- 有一个大数组,var a = ['1', '2', '3', ...];a的长度是100,内容填充随机整数的字符串.请先构造此数组a,然后设计一个算法将其内容去重
- 设计一个算法,判断给定的一棵二叉树是否是二叉排序树(二叉树的所有关键字均为正整数)
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 对于一个m*n的整数矩阵,其中每一行和每一列的元素都按升序排列,设计一个高效的算法判断一个数值是否存在,并给出位置