给定两个有序数组arr1和arr2,再给定一个整数K,返回所有数中第K小的数。
[要求]
如果arr1的长度为N,arr2的长度为M,时间复杂度请达到
,额外空间复杂度
。
第一行三个整数N, M, K分别表示数组arr1, arr2的大小,以及需要询问的数
接下来一行N个整数,表示arr1内的元素
再接下来一行M个整数,表示arr2内的元素
输出一个整数表示答案
5 3 1 1 2 3 4 5 3 4 5
1
1是所有数中第一小的数
3 4 4 1 2 3 3 4 5 6
3
3是所有数中第4小的数,所以返回3
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] params = br.readLine().split(" ");
int n = Integer.parseInt(params[0]), m = Integer.parseInt(params[1]), k = Integer.parseInt(params[2]);
params = br.readLine().split(" ");
int[] nums1 = new int[n];
for(int i = 0; i < n; i++) nums1[i] = Integer.parseInt(params[i]);
params = br.readLine().split(" ");
int[] nums2 = new int[m];
for(int i = 0; i < m; i++) nums2[i] = Integer.parseInt(params[i]);
// 归并
int p1 = 0, p2 = 0, p = 0;
while(p1 < n && p2 < m){
if(nums1[p1] < nums2[p2]){
p1 ++;
p ++;
if(p == k){
System.out.println(nums1[p1 - 1]);
break;
}
}else{
p2 ++;
p ++;
if(p == k){
System.out.println(nums2[p2 - 1]);
break;
}
}
}
}
}