找出有序数列中符合条件的数对的个数

在给定的有序整数数组中,通过二分法寻找所有数对,使得它们的和等于数组长度加一。算法描述包括从两端向中间遍历,当和小于目标值时增加左指针,等于目标值时更新结果并移动指针,大于目标值时减少右指针,直至两个指针交叉。示例代码展示了如何在数组{0,1,2,3,4,5,6,7,8,9}中找到和为11的数对。" 119300017,1908045,OpenResty在API网关的限频限流实践,"['OpenResty', 'API网关', '限流策略']
摘要由CSDN通过智能技术生成

问题描述:一个有序整数数组,元素取值可能是 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--;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值