コード例 #1
0
ファイル: 004.cpp プロジェクト: Pirdboy/Leetcode
 double findMedianSortedArrays(int A[], int m, int B[], int n) {
     if((m+n)%2==1)
         return (double)findKthElement(A,m,B,n,(m+n)/2+1);
     else{
         int a=findKthElement(A,m,B,n,(m+n)/2);
         int b=findKthElement(A,m,B,n,(m+n)/2+1);
         return ((double)a+(double)b)/2.0;
     }
         
 }
コード例 #2
0
int findKthElement(int *nums, int startIndex,int endIndex, int k){
    if(startIndex == endIndex) return nums[k];
    int idx = RandSelectElement(nums, startIndex, endIndex);
    int kk = idx - startIndex + 1;
    if(kk < k){
        return findKthElement(nums, idx+1, endIndex,k-kk);
    }
    else if (kk > k){
        return findKthElement(nums, startIndex, idx,k);
    }
    return nums[idx];
}
コード例 #3
0
ファイル: 004.cpp プロジェクト: Pirdboy/Leetcode
 int findKthElement(int A[],int m,int B[],int n,int k){
     if(m>n)
         return findKthElement(B,n,A,m,k);
     if(m==0){
         return B[k-1];
     }
     if(k==1)
         return Min(A[0],B[0]);
     int countA=Min(k/2,m);
     int countB=k-countA;
     if(A[countA-1]<B[countB-1])
         return findKthElement(A+countA,m-countA,B,n,k-countA);
     else if(A[countA-1]==B[countB-1])
         return A[countA-1];
     else
         return findKthElement(A,m,B+countB,n-countB,k-countB);
 }
コード例 #4
0
int findKthLargest(int* nums, int numsSize, int k) {
    return findKthElement(nums,0,numsSize,numsSize-k+1);
}