題目描述
給定兩個有序數組arr1和arr2,在給定一個整數k,返回兩個數組的所有數中第K小的數。
例如:
arr1 = {1,2,3,4,5};
arr2 = {3,4,5};
K = 1;
因爲1爲所有數中最小的,所以返回1;
arr1 = {1,2,3};
arr2 = {3,4,5,6};
K = 4;
因爲3爲所有數中第4小的數,所以返回3;
要求:如果arr1的長度爲N,arr2的長度爲M,時間複雜度請達到O(log(min{M,N}))。
//多數組K大數
public int findKthNum(int[] arr1, int[] arr2, int kth) {
int len1 = arr1.length;
int len2 = arr2.length;
int k = 0;
int i =0;
int j =0;
int result;
while (i < len1 && j < len2) {
if (arr1[i] < arr2[j]) {
result = arr1[i];
++i;
}else {
result = arr2[j];
++j;
}
++k;
if (k == kth) {
return result;
}
}
while (i < len1) {
++k;
if (k == kth) {
return arr1[i];
}
++i;
}
while (j < len2) {
++k;
if (k == kth) {
return arr2[j];
}
++j;
}
return 0;
}