1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法。
2013-05-18 23:22
399 查看
使用的是快速排序,加上两头夹逼来查找
#include <iostream>
using namespace std;
void QuickSort(int*s,int low,int
high)
{
int pivot_pos;
int i;
int j;
//当low=high时递归退出
if (low< high)
{
//首先确定一个基准数
pivot_pos = s[low];
i = low;
j = high;
//查找基准数
while
(i < j)
{
//从后往前查找
while
(i<j && s[j]>=pivot_pos)
j--;
if(i< j)
{
s[i]= s[j];
i++;
}
//从前往后查找
while
(i<j && s[i]<pivot_pos)
i++;
if
(i < j)
{
s[j]= s[i];
j--;
}
}
s[i]= pivot_pos;
QuickSort(s,low,i-1);
QuickSort(s,i+1,high);
}
}
void find_pair(int*s,int n,int
x)
{
int *begin=s;
int *end=s+n-1;
//俩头夹逼
while(begin<end)
{
if(*begin+*end>x)
{
end--;
}
else
if(*begin+*end<x)
{
begin++;
}
else
{
cout <<*begin<<" "<<*end<<endl;
begin++;
end--;
}
}
cout<<"No found!"<<" ";
}
int main()
{
int data[9]={8,3,5,8,9,1,2,4,4};
QuickSort(data,0,8);
int x;
while(cin>> x)
{
find_pair(data,8,x);
}
return 0;
}
#include <iostream>
using namespace std;
void QuickSort(int*s,int low,int
high)
{
int pivot_pos;
int i;
int j;
//当low=high时递归退出
if (low< high)
{
//首先确定一个基准数
pivot_pos = s[low];
i = low;
j = high;
//查找基准数
while
(i < j)
{
//从后往前查找
while
(i<j && s[j]>=pivot_pos)
j--;
if(i< j)
{
s[i]= s[j];
i++;
}
//从前往后查找
while
(i<j && s[i]<pivot_pos)
i++;
if
(i < j)
{
s[j]= s[i];
j--;
}
}
s[i]= pivot_pos;
QuickSort(s,low,i-1);
QuickSort(s,i+1,high);
}
}
void find_pair(int*s,int n,int
x)
{
int *begin=s;
int *end=s+n-1;
//俩头夹逼
while(begin<end)
{
if(*begin+*end>x)
{
end--;
}
else
if(*begin+*end<x)
{
begin++;
}
else
{
cout <<*begin<<" "<<*end<<endl;
begin++;
end--;
}
}
cout<<"No found!"<<" ";
}
int main()
{
int data[9]={8,3,5,8,9,1,2,4,4};
QuickSort(data,0,8);
int x;
while(cin>> x)
{
find_pair(data,8,x);
}
return 0;
}
相关文章推荐
- 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法
- 162 1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 2个二叉树A、B,树的每个节点上都有一个整数值。如何判断A与B是否其中一个是另一个的子树?
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法
- 有一个大数组,var a = ['1', '2', '3', ...];a的长度是100,内容填充随机整数的字符串.请先构造此数组a,然后设计一个算法将其内容去重
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 输入一个字符串,将其中连续的数字作为一个整数,一次存放到另一个整型数组,设计一个函数,把指向字符串的指针和指向整数的指针作为函数形参
- 每天学习一算法系列(9) (输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果)