給定兩個有序陣列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 額外空間複雜度為...