给定一个长度为n的且已经按升序排序的整形数组a[],和一个整数x,设计一个C语言函数int isSum(int a[],int n,int x),判断是否存在两个元素使它们之和为x,如果存在则返回0。否则-1,请尽可能减少时间复杂度,并用O(f(n))表示算法时间复杂度。
//借鉴本题回答中“天道酬勤~~”的思想
#include<stdio.h>
int isSum(int a[],int n,int x){
int low=0,high=n-1;
while(low<high){
if(a[low]+a[high]>x)
high--;
else if(a[low]+a[high]<x)
low++;
else return 0;
}
return -1;
}
int main(){
int a[]={1,3,5,6,12},n=5,x=12;
if(isSum(a,n,x)==0)
printf("YES!");
else printf("NO!");
return 0;
}