zoukankan      html  css  js  c++  java
  • 两个排序数组的中位数(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 }
  • 相关阅读:
    Qt4的项目在转到Qt5时遇到的问题解决方案链接
    禁止MFC的MDI程序自动创建空白子窗体
    工厂方法(factory method)
    简单工厂模式(Simple Factory)
    单例模式(Singleton Pattern)
    设计模式六大设计原则
    Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题
    原生javascript和jquery实现简单的ajax例子
    MS Sql server 2008 学习笔记
    C#面向对象学习笔记概要
  • 原文地址:https://www.cnblogs.com/xuzhiyuan/p/7607394.html
Copyright © 2011-2022 走看看