两个排序数组的中位数(4.Median of Two Sorted Arrays)

题目:

有两个排序的数组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 }

 

posted @ 2017-09-28 16:45  xzy不会飞的地板流  阅读(245)  评论(0编辑  收藏  举报