JAVA教學
Java 檔案
求兩個排序數組的中位數的問題是一個經典的編碼面試問題。挑戰在於有效地找出中位數,時間複雜度為 O(log(min(m, n))),其中 m 和 n 是兩個陣列的大小。在本文中,我們將介紹一個使用二分搜尋來實現這種效率的 Java 解決方案。
給定兩個排序數組 nums1 和 nums2,找出這兩個排序數組的中位數。總體運行時複雜度應為 O(log(min(m, n))),其中 m 和 n 是兩個陣列的大小。
為了解決這個問題,我們對兩個數組中較小的一個使用二分搜尋方法。目標是對兩個陣列進行分區,使左半部包含小於或等於右半部元素的所有元素。這是一步一步的解釋:
以下是此解決方案的詳細 Java 實作:
public class MedianOfTwoSortedArrays { public double findMedianSortedArrays(int[] nums1, int[] nums2) { // Ensure nums1 is the smaller array if (nums1.length > nums2.length) { int[] temp = nums1; nums1 = nums2; nums2 = temp; } int x = nums1.length; int y = nums2.length; int low = 0, high = x; while (low minY) { high = partitionX - 1; } else { low = partitionX 1; } } throw new IllegalArgumentException("Input arrays are not sorted"); } public static void main(String[] args) { MedianOfTwoSortedArrays solution = new MedianOfTwoSortedArrays(); int[] nums1 = {1, 3}; int[] nums2 = {2}; System.out.println("Median: " solution.findMedianSortedArrays(nums1, nums2)); // Output: 2.0 int[] nums1_2 = {1, 2}; int[] nums2_2 = {3, 4}; System.out.println("Median: " solution.findMedianSortedArrays(nums1_2, nums2_2)); // Output: 2.5 } }
這種二分搜尋方法提供了一個有效的解決方案來找出兩個排序數組的中位數。透過在較小的數組上利用二分搜索,該解決方案實現了 O(log(min(m, n))) 的時間複雜度,使其適合大型輸入數組。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3