データ構造-武大933

1077 ワード

2018武漢大学933
2つの整数は、順序付けられたシーケンスAをインクリメントし、Bはそれぞれnとmの要素を持ち、k番目の大きな数(1≦K≦n+m)を求め、最適な時間空間の複雑さを要求する.
関数プロトタイプ:int kMax(int[]A,int[]B,int k)
例:
入力
A[1,3,4,5,6]
B[3,4,5,6]
k=4
出力
4
#include
#include
#include
#include
#define MAX 0x3f3f3f3f
using namespace std;

int findIthValue(int a[], int n1, int b[], int n2, int k)
{
	/*
		           ,                        
		                      ,        
	*/
	int s1= 0, s2= 0;
	int count = 0, now = 0;
	while(s1 < n1 && s2 < n2)
	{
		if(a[s1] <= b[s2])
		{
			now = a[s1++];
			count++;
		}
		else if(a[s1] > b[s2])
		{
			now = b[s2++];
			count++;
		}
		if(count == k)
			return now;
	}

	while(s1 < n1)
	{
		now = a[s1++];
		count++;
		if(count == k)
			return now;
	}
	while(s2 < n2)
	{
		now = b[s2++];
		count++;
		if(count == k)
			return now;
	}
	
	return MAX;
}

int main()
{
	
	int a[] = {1};
	int b[] = {3,4,6,8};
	int result = findIthValue(a, 1, b, 4, 3);
	cout<