查找整数对

该博客介绍了一个在O(nlog2n)复杂度内查找数组中两数之和为特定值x的算法。首先对数组进行排序,然后采用双指针法,从数组两端向中间遍历,当两数之和等于x时输出这对数,最终如果未找到满足条件的数对则输出相应提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目】
一个长度为n的整型数组a,给定整数x,设计一个复杂度不超过O(nlog2n)的算法,查找出这个数组中所有两两和为x的整数对并输出。

【思路】
先对该数组进行排序,可以考虑快速排序或归并排序,然后分别从数组的小端i=0和大端j=n-1开始,将两数相加,若和大于x,则大端前移j–,若小于x则小端后移i++,相等则输出两个数,直至i>=j。

#include <iostream>
#include <algorithm>
#define MAX 100
using namespace std;
int main()
{
	int i,j,n,x,a[MAX];
	bool f=false;
	cout<<"输入n:"; 
	cin>>n;
	cout<<"输入数组:"; 
	for(i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n); //快速排序 
	cout<<"输入x:"; 
	cin>>x;
	i=0; //第一个元素 
	j=n-1; //最后一个元素 
	while(i<j)
	{
		if(a[i]+a[j]==x)
		{
			f=true; //找到整数对 
			cout<<a[i]<<" "<<a[j]<<endl;
			i++;
			j--;
		}
		else if(a[i]+a[j]>x)
			j--; //j前移 
		else
			i++; //i后移	
	}
	if(!f)
		cout<<"不存在和为x的整数对!";
	return 0;
}

【结果】
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值