题目:
有两个排序的数组nums1和nums2分别为m和n大小。
找到两个排序数组的中位数。整体运行时间复杂度应为O(log(m + n))。
示例1:
nums1 = [1,3] nums2 = [2] 中位数为2.0
示例2:
nums1 = [1,2] nums2 = [3,4] 中位数为(2 + 3)/ 2 = 2.5
解题思路:
创建一个新的长度为num1与nums2长度之和的int类型数组nums,用来存放nums1与nums2中的元素,依次将nums1与nums2数组中较小的元素逐个放入创建的数组nums,直到nums1与nums2都为空;
已排好序的nums数组的中位数就是题中要求的中位数;
代码:
1 class Solution { 2 public double findMedianSortedArrays(int[] nums1, int[] nums2) { 3 4 int n=nums1.length+nums2.length; 5 int[] nums=new int[n];//创建一个长度为n的数组,用来存放nums1中,nums2中元素 6 7 int i=0; 8 int j=0; 9 int k=0; 10 double mid=0;//两个有序数组的中位数 11 12 while(i<nums1.length||j<nums2.length){ 13 14 if(i>=nums1.length){//如果i>=nums1.length说明nums1中的所有元素都已经被存入nums中 15 16 //只需将nums2中剩余元素存入nums中即可 17 nums[k++]=nums2[j++]; 18 19 }else if(j>=nums2.length){//如果j>=nums.length说明nums2中所有元素都已经存入nums中 20 21 //只需将nums1中的剩余元素存入nums中即可 22 nums[k++]=nums1[i++]; 23 24 }else{//如果nums1中和nums2中都还有元素未存入nums中 25 26 //则将nums1[i]和nums2[j]中小者存入nums中 27 if(nums1[i]<nums2[j]){ 28 29 nums[k++]=nums1[i++]; 30 31 }else{ 32 33 nums[k++]=nums2[j++]; 34 35 } 36 } 37 38 } 39 40 if(n%2==0){//如果n是偶数 41 42 if(n==0){ 43 44 return 0; 45 46 } 47 48 mid=(nums[n/2-1]+nums[n/2])/2.0; 49 50 }else{//如果n是奇数 51 52 mid=nums[(n-1)/2]; 53 54 } 55 56 return mid; 57 } 58 }