1029 Median

1: 定义数组为全局变量,不要放在main 里

long s1[max],s2[max];//定义在main里就死机

2:归并排序不需要第三个数组存储结果,只需要中位数一个值就行,

另外,中位数的下标是:

long mid = (l1+l2-1)/2 ;//位置下标,注意是l1+l2 - 1


一次过好爽

#include <stdio.h>

const int max = 1000000+5;
long s1[max],s2[max];//定义在main里就死机
long l1,l2;

int main(){
	//freopen("in.txt","r",stdin);


	scanf("%ld",&l1);
	for(long i = 0; i < l1; i++){
		scanf("%ld",&s1[i]);
	}
	scanf("%ld",&l2);
	for(long i = 0; i < l2; i++){
		scanf("%ld",&s2[i]);
	}

	long mid = (l1+l2-1)/2 ;//位置下标,注意是l1+l2 - 1
	long k = 0;
	bool isFound = false;

	long j1 = 0, j2 = 0;//两个指针
	while(k <= mid && j1 < l1 && j2 < l2){
		int curVal;
		if(s1[j1] < s2[j2]){
			curVal = s1[j1];
			j1++;
		}else{
			curVal = s2[j2];
			j2++;
		}
			
		//test
		//printf("when k = %ld val=%ld\n",k,curVal);

		if(k == mid){
			printf("%ld",curVal);
			isFound = true;
			break;
		}
		k++;
	}

	if(!isFound){
		if(j1 < l1){
			printf("%ld",s1[mid - k + j1]);
		}
		else if(j2 < l2){
			printf("%ld",s2[mid - k + j2]);
		}
	}

	return 0;
}


你可能感兴趣的:(1029 Median)