问题描述:一个有序整数数组,元素取值可能是 1--N 中的任何一个,相同的数值不会重复出现。
设计一个算法:找出有序数列中符合条件的数对的个数,满足数对中两数之和为 N+1
使用二分法查找,用两个指针分别指向最开始和最后的一个数,从两端向中间遍历,直到两个指针交叉
#include<iostream>
using namespace std;
//找出数列中符合条件的数对的个数
void Find_sum(int *a,int n,int sum)
{
for(int i=0,j=n-1;j>i&&j>0&&i<n;)
{
if(a[i]+a[j]<sum)
i++;
else if(a[i]+a[j]==sum)
{
cout<<a[i]<<" "<<a[j]<<endl;
i++;
j--;