題目鏈接
思路:
我最開始的思路是這樣的,獲取兩個數組的總長度,求得中位數(除2),如果總長度是奇數的話,那求得
的那個數就是兩個有序數組中的角標,如果總長度是偶數的話那就是當前角標加上前面的那個角標的值,所以我
們需要定義一個變量存儲前面的那個角標的數。
定義,i,j兩個變量遍歷兩個數組,如果有一個可以排序的話,那就把那個數組的數放進去,變量加一。當然
我們還需要判斷每個數組長度,防止異常。接下來 是我自己寫的,執行成功的,一次就成,而且複雜度也挺低的,
第一次。
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int sumLength = nums1.length+nums2.length, index = sumLength/2,over = sumLength%2,pri = 0,cur = 0;
for (int i = 0, j = 0,k = 0;k<sumLength;k++){
// 判斷兩數組角標,獲取當前排序數
if (i<nums1.length && j <nums2.length){
if (nums1[i]>=nums2[j]){
cur = nums2[j++];
}else {
cur = nums1[i++];
}
}else if (i >= nums1.length && j < nums2.length){
cur = nums2[j++];
}else {
cur = nums1[i++];
}
// 先判斷當前數是不是中位數
if (k == index){
// 判斷奇數偶數,奇數直接返回當前數,偶數當前數同 tmp平均
if (over>0){
return cur;
}else {
return (pri+cur)/2.0;
}
}else {// 不是就把當前數存儲到pri裏面
pri = cur;
}
}
return 0;
}
給大家看下效率。