演算法總結之 在兩個排序陣列中找到第K小的數

2021-09-30 23:17:17 字數 1258 閱讀 1669

給定兩個有序陣列arr1 和 arr2 ,再給定乙個int k,返回所有的數中第k小的數

要求長度如果分別為 n m,時間複雜度o(log(min),額外空間複雜度o(1)

解決此題的方法跟之前的求兩個陣列求中位數的情況,如出一轍~ 非常給力!

此題目需要分情況討論: 

假設長度較短的陣列長度 lens   較長的lenl

情況1、 k<1  或者 k>lens+lenl    k值無效

情況2、 k<=lens  分別在兩陣列選擇第前 k個數, 然後取其中位數

情況3、 k>lenl  

package

tt;public

class

test13

else

if(a1[mid1]

else

}return

math.min(a1[s1], a2[s2]);

}

public

static

int findkthnum(int arr1, int arr2, int

kth)

if(kth<1 || kth>arr1.length+arr2.length)

int longs = arr1.length >=arr2.length ?arr1 :arr2;

int shorts = arr1.length arr1 :arr2;

int l =longs.length;

int s =shorts.length;

if(kth <=s)

if(kth>l)

if(longs[kth-s-1]>=shorts[s-1])

return getupmedian(shorts, kth-l, s-1, longs, kth-s, l-1);

}if (longs[kth-s-1]>=shorts[s-1])

return getupmedian(shorts, 0, s-1, longs, kth-s, kth-1);

}

public

static

void

main(string args )

}

結果:

posted @

2017-08-23 16:13

toov5 閱讀(

...)

編輯收藏

演算法總結之 在兩個長度相等的排序陣列中找到上中位數

題目描述 arr1 和 arr2 長度都為n 求兩個陣列中所有數的上中位數 要求 時間複雜度 o logn 額外空間複雜度o 1 這道題目的方法比較好玩 這兩個陣列如下表示 arr1 start1.end1 arr2 start2.end2 如果start1 start2 那麼也有start2 en...

在兩個長度相等的排序陣列中找到上中位數

給定兩個有序陣列arr1和arr2,已知兩個陣列的長度都為n,求兩個陣列中所有數的上中位數。上中位數 假設遞增序列長度為n,若n為奇數,則上中位數為第n 2 1個數 否則為第n個數 輸入為 arr1 1,2,3,4 arr2 3,4,5,6 輸出為3 輸入為 arr1 0,1,2 arr2 3,4,...

在兩個長度相等的排序陣列中找到上中位數

在兩個長度相等的排序陣列中找到上中位數 給定兩個有序陣列arr1和arr2,已知兩個陣列的長度都為n,求兩個陣列中所有數的上中位數。上中位數 假設遞增序列長度為n,若n為奇數,則上中位數為第n 2 1個數 否則為第n個數 要求 時間複雜度為o l ogn o logn o logn 額外空間複雜度為...