输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可

思路:

利用左右指针实现

首先,这个数组是有序的,这是个重要的条件,如果没有这个条件,后面的办法根本不行

那么这个数组最小值是第1,2个元素的和,最大值是末尾两个元素的和

利用左右指针指向的值求和判断指针到底是左移还是右移

void getTargetElemts(int* arr,int len,int target){
    int left = 0;
    int right = len - 1;
    do{
        int sum = arr[left] + arr[right];
        if(sum > target){
            right--;
        } else if(sum < target){
            left++;
        } else{
            cout<< left<<","<<right<<endl;
            cout<< arr[left]<<","<<arr[right]<<endl;
            return;
        }
    }while (left < right );
}
原文地址:https://www.cnblogs.com/dongma/p/13929078.html