问题分析:时间复杂度为O(n),即只能遍历一次数组,考虑到数组是排好序的,考虑从头部和从尾部同时向数组的中部遍历,假设i从头部遍历,j从尾部开始遍历:
方法:
void get_sum(int *a, int length, int n){
if (NULL == 0 || length <= 0) return;
int start = 0;
int end = length - 1;
while (start < end){
if (a[start] + a[end] == n){
printf("%d,%d\n", a[start], a[end]);
break;
}else if (a[start] + a[end] > n){
end --;
}else{
start ++;
}
}
}