Java算法練習題,每天進步一點點(2)
題目描述
尋找兩個正序數組的中位數
難度:困難
給定兩個大小分別為 m 和 n 的正序(從小到大)數組 nums1 和 nums2。請你找出並返回這兩個正序數組的 中位數 。
示例 1:
輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合並數組 = [1,2,3] ,中位數 2
示例 2:
輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合並數組 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5
示例 3:
輸入:nums1 = [0,0], nums2 = [0,0]
輸出:0.00000
示例 4:
輸入:nums1 = [], nums2 = [1]
輸出:1.00000
示例 5:
輸入:nums1 = [2], nums2 = []
輸出:2.00000
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
解題思路
題目大意: 就是求中位數,如果數組有奇數個那就是求中間那個數即可,如果公有偶數個,那就是中間兩個數的平均值。
解題思路:
有時候簡單的思路往往可以解決問題,我們隻需要在new一個長度為兩個數組長度之和的空數組,然後把兩個數組都放進去,然後sort一下,嗯沒錯直接sort就行,然後排好序後,就直接求出中間下標,判斷下數組長度是不是偶數個,在分別處理即可
代碼
/** * Keafmd * * @ClassName: FindTheMedianOfTwoPositivelyOrderedArrays * @Description: 尋找兩個正序數組的中位數 * @author: 牛哄哄的柯南 * @date: 2021-07-22 18:22 */ class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int l1 = nums1.length; int l2 = nums2.length; int[] num = new int[l1+l2]; int i=0,j=0; int k=0; double res =0; while(i<l1){ num[k++] = nums1[i++]; } while(j<l2){ num[k++] = nums2[j++]; } Arrays.sort(num); int sum_len = l1+l2; int mid = sum_len/2; if(sum_len%2==0){ res = (num[mid]+num[mid-1])/2.0; }else{ res = num[mid]; } return res; } }
總結
本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- C++實現LeetCode(兩個有序數組的中位數)
- java版十大排序經典算法:完整代碼(4)
- java版十大排序經典算法:完整代碼
- Java算法練習題,每天進步一點點(1)
- Java算法真題詳解運用單調棧