LeetCode4 尋找兩個有序陣列的中位數

2021-10-01 06:51:32 字數 829 閱讀 7805

思路1:將兩個陣列按照索引i與索引j切分為左右兩個部分,左半部分與右半部分的元素數量相同,並且尋找到左半部分最大值小於右半部分最小值的位置,中位數就在附近,具體的根據總長度是偶數/奇數確定。尋找索引的過程為二分。時間複雜度為o(logmin(shortlength,longlength))

思路2:轉換為尋找第k小的數字,相當於對兩個陣列分別尋找第k/2小的數字,由於兩個陣列都是有序的,所以可以直接根據下標對不可能是第k/2小的數字進行刪除,該操作的時間複雜度為o(1)。由於是二分刪除,所以時間複雜度為o(log((m+n)/2)),即o(log(m+n))。

【以下是思路一的**:

public double findmediansortedarrays(int nums1, int nums2) 

else if(max2>min1)

}return totallength%2==0?(leftmax+rightmin)/2.0:leftmax;

}

尋找單個有序序列的中位數

public double getmiddlenum(int nums, int left, int right)

else

}

LeetCode 4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

LeetCode 4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...

LeetCode4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...