牛骨文教育服务平台(让学习变的简单)
博文笔记

如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)

创建时间:2015-10-17 投稿人: 浏览次数:144
由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为O(1).
#include<iostream>
using namespace std;
bool find(int data[], int length, int num, int &num1, int &num2){ 
	int head = 0;
	int tail = length - 1;
	while (head != tail){
		int temp= data[head] + data[tail];
		if (temp == num) 
		{ 
		num1 = data[head];
		num2= data[tail];
		return true; }      
		if (temp<num) head++;
		else tail--;
	}
	return false;
}
int main(void){
	int data[] = { 1, 2, 4, 7, 11, 15 };
	int a = 0, b = 0;
	if (find(data, 6, 15,a,b)){
		cout<<a<<" "<<b<< endl;
	}
	else 
	cout<<"no numbers"<< endl;
	return 0;
}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。