输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求算法的时间复杂度O(n).
#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
//输入的数据小于100
void printSum(int a[],int n,int total)
{
int b[100]={0};
for(int i=0;i<n;i++)
b[a[i]]++;
for(int j=0;j<n;j++)
{
int m=total-a[j];
if(b[m]==1)
{
printf("%d+%d=%d\n",a[j],m,total);
break;
}
}
}
//第二种方法
void printSum2(int a[],int n,int total)
{
int start=0;
int end=n-1;
bool isflag=false;
while(start<end)
{
if(a[start]+a[end]>total)
end--;
else
if(a[start]+a[end]<total)
start++;
else
{
isflag=true;
break;
}
}
if(isflag)
printf("%d+%d=%d\n",a[start],a[end],total);
else
printf("not find\n");
}
int main(int argc,char**argv)
{
int a[]={1,2,4,5,6,10,15,16};
int size=sizeof(a)/sizeof(int);
int k=26;
//printSum(a,size,k);
printSum2(a,size,k);
return 0;
}