1029. Median (25)
http://pat.zju.edu.cn/contests/pat-a-practise/1029
题目大意,给两个从小到大排好的数组,求这两个数组有序合并在一起的大数组的中位数。
思路:两个数组各给一个指针,比较并往后移动,走了一定的步数后,把数输出来。
//最初没弄好指针的含义,导致错了几次。指针的含义是:所指的位置为“还没访问的地方的首位”。
#include <stdio.h> int arr1[1000005]; int arr2[1000005]; int main(){ int N,M; int i,j; scanf("%d",&N); for(i=0;i<N;i++){ scanf("%d",&arr1[i]); } scanf("%d",&M); for(i=0;i<M;i++){ scanf("%d",&arr2[i]); } int ptr1=0,ptr2=0;//指向未被包含的首位 int mid = (N+M-1)/2; while(1){ if(arr1[ptr1]<arr2[ptr2]&&ptr1!=N){ ptr1++; if(ptr1+ptr2-1==mid){ printf("%d\n",arr1[ptr1-1]); return 0; } } if(arr1[ptr1]>=arr2[ptr2]&&ptr2!=M){ ptr2++; if(ptr1+ptr2-1==mid){ printf("%d\n",arr2[ptr2-1]); return 0; } } if(ptr1==N){ ptr2++; if(ptr1+ptr2-1==mid){ printf("%d\n",arr2[ptr2-1]); return 0; } } if(ptr2==M){ ptr1++; if(ptr1+ptr2-1==mid){ printf("%d\n",arr1[ptr1-1]); return 0; } } } return 0; }
浙公网安备 33010602011771号