LeetCode4:
给定两个大小为 m 和 n 的有序数组 nums1
和 nums2
。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
解法一:
将两个数组合并后找中位数。
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length - 1; int len2 = nums2.length - 1; int temp[]= new int[len1 + len2 + 2]; int k = len1 + len2 + 1; double res = 0; while(len1 >= 0 && len2 >= 0){ if(nums1[len1] > nums2[len2]){ temp[k] = nums1[len1]; k--; len1--; }else{ temp[k] = nums2[len2]; k--; len2--; } } if(len1 < 0){ while(len2 >= 0){ temp[k] = nums2[len2]; k--; len2--; } }else{ while(len1 >= 0){ temp[k] = nums1[len1]; k--; len1--; } } int len = temp.length; if(len % 2 != 0){ res = temp[(len - 1) / 2]; }else{ res = (temp[len / 2] + temp[(len / 2) - 1])/2.0; } return res; } }
解法二: