#include <iostream> using namespace std; //输入一个已经按升序排序过的数组和一个数字, //在数组中查找两个数,使得它们的和正好是输入的那个数字。 //要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 //例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 void Grial(int a[],int x,int y) { int j=x-1; int i=0; while(a[j]>y) { j--; } while(i<j) { while((a[i]+a[j])>y) j--; if((a[i]+a[j])>y) { j--; } else if((a[i]+a[j])<y) { i++; } else { cout<<a[i]<<endl; cout<<a[j]<<endl; return; } } } //注意时间复杂度最多是o(n),从两边往中间找,我不知到有没有这个算法,或者有更好的算法,但是我遇到这个问题时我思考了一下 //解决这个问题了,我是很开心的,希望和大家一起加油. int main() { int a[]={1, 2 ,3 ,4 ,5 ,6 ,7 ,8 ,9,100,3000}; Grial(a,11,3003); return 0; }
时间: 2024-12-08 21:15:13