需要找兩個有序數組的第K個數
public class Main {
public static void main(String[] args){
int nums1[]={1,2,3,4,5,6};
int nums2[]={7,8,9,10,11,12};
Main main=new Main();
System.out.println(main.findKth(nums1, nums2, 0, 0, nums1.length, nums2.length, 7));
}
private double findKth(int[] arr1, int[] arr2, int start1, int start2, int len1, int len2, int k){
// 保證arr1是較短的數組
if(len1>len2){
return findKth(arr2,arr1,start2,start1,len2,len1,k);
}
if(len1==0){
return arr2[start2 + k - 1];
}
if(k==1){
return Math.min(arr1[start1],arr2[start2]);
}
int p1 = Math.min(k/2,len1) ;
int p2 = k - p1;
if(arr1[start1 + p1-1]<arr2[start2 + p2-1]){
return findKth(arr1,arr2,start1 + p1,start2,len1-p1,len2,k-p1);
} else if(arr1[start1 + p1-1]>arr2[start2 + p2-1]){
return findKth(arr1,arr2,start1,start2 + p2,len1,len2-p2,k-p2);
} else {
return arr1[start1 + p1-1];
}
}
}