题目:

There are two sorted arrays nums1 and nums2 of size m and n respectively.

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

 Example 1:
nums1 = [1, 3]
nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4] The median is (2 + 3)/2 = 2.5

  即找两个有序数组的中位数,一开始想的是用第三个数组来把前面两个数组的值依次放进去,再直接找中间的数,但是对时间复杂度的要求是O(log (m+n)),所以不能用数组存。网上找的方法是比较两个数组中间的元素,如AB两个数组,如果A[mid]>B[mid],那中位数肯定就不在B的前半段,于是缩小了范围,即B后半段加上A,然后依次查找并缩小范围,直到找到中间的数为止。

public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) { int m=nums1.length;
int n=nums2.length;
if((m+n)%2==0)
return (findKMax((m+n)/2,nums1,0,nums2,0)+findKMax((m+n)/2+1,nums1,0,nums2,0))/2.0;//如果是偶数
else
return findKMax((m+n)/2+1,nums1,0,nums2,0);//如果是奇数
}
public int findKMax(int k,int[] nums1,int start1,int[] nums2,int start2){
if(start1>=nums1.length)//第一个数组长度为0的话,直接返回第二个数组的中位数
return nums2[start2+k-1]; if(start2>=nums2.length)//第二个数组长度为0的话,直接返回第一个数组的中位数
return nums1[start1+k-1]; if(k==1)//k=1,即找第一个,也就是nums1或nums2中最小的
return Math.min(nums1[start1], nums2[start2]); int temp1=start1+k/2-1;
int temp2=start2+k/2-1; int mid1=temp1<nums1.length?nums1[temp1]:Integer.MAX_VALUE;//nums1没有下标为temp1的元素,如果有,就用那个元素比较,没有就用最大int
int mid2=temp2<nums2.length?nums2[temp2]:Integer.MAX_VALUE; if(mid1>=mid2)
return findKMax(k-k/2,nums1,start1,nums2,temp2+1);//如果mid1大,也就是nums1中间的数大,那么nums1前半段不会有中位数
else //从nums1后半段和nums1开始找
return findKMax(k-k/2,nums1,temp1+1,nums2,start2); } }

Leetcode 5——Median of Two Sorted Arrays的更多相关文章

  1. 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays

    一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...

  2. LeetCode(3) || Median of Two Sorted Arrays

    LeetCode(3) || Median of Two Sorted Arrays 题记 之前做了3题,感觉难度一般,没想到突然来了这道比较难的,星期六花了一天的时间才做完,可见以前基础太差了. 题 ...

  3. LeetCode 4 Median of Two Sorted Arrays (两个数组的mid值)

    题目来源:https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 an ...

  4. Leetcode 4. Median of Two Sorted Arrays(二分)

    4. Median of Two Sorted Arrays 题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/ Descr ...

  5. LeetCode 4. Median of Two Sorted Arrays & 归并排序

    Median of Two Sorted Arrays 搜索时间复杂度的时候,看到归并排序比较适合这个题目.中位数直接取即可,所以重点是排序. 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个 ...

  6. 第三周 Leetcode 4. Median of Two Sorted Arrays (HARD)

    4. Median of Two Sorted Arrays 给定两个有序的整数序列.求中位数,要求复杂度为对数级别. 通常的思路,我们二分搜索中位数,对某个序列里的某个数 我们可以在对数时间内通过二 ...

  7. Leetcode 4. Median of Two Sorted Arrays(中位数+二分答案+递归)

    4. Median of Two Sorted Arrays Hard There are two sorted arrays nums1 and nums2 of size m and n resp ...

  8. LeetCode 004 Median of Two Sorted Arrays

    题目描述:Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. F ...

  9. leetcode 4. Median of Two Sorted Arrays

    https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 and num ...

  10. leetcode之 median of two sorted arrays

    这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetc ...

随机推荐

  1. hdu5860 Death Sequence

    这题一开始写的线段数是从中间开始查找 k个 导致是nlogn 每次查找应该都是从头找每次找的个数不同就好了 还有一种递推的写法我放下面了 #include<bits/stdc++.h> u ...

  2. 手机端仿ios的三级联动脚本四

    二,脚本 <script> $("#city-picker").cityPicker({ title: "选择省市区/县", onChange: f ...

  3. POJ 2187 Beauty Contest(凸包,旋转卡壳)

    题面 Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, earning the ...

  4. jdbc连接数据库并打印的简单例子

    6步连接数据库: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impor ...

  5. 极重要基础命令三剑客加find

    find  -type:以文件类型查找 -name:以文件名查找 ! 取反 sed命令实战: sed -n “2p” oldboy.txt 打印第二行 sed -n "1,2p" ...

  6. 在Service中抛出异常事务未回滚问题分析与解决

    1.问题提出:在service中写方法时,抛出了一个Exception, 本来目的是为了让事务回滚, 但事实上没有回滚,产生了脏数据.代码如下:@Override@Transactionalpubli ...

  7. mysql的下载安装

    不知道为什么,写这篇文章我总是想感慨一下.首先我的感谢和敬佩那些能把知识和技术分享出来的开发者,不管你的技术是否很牛,但是你的精神让我十分敬佩.学java的已经二天了,除了问问朋友,给我最大帮助的就是 ...

  8. Eclipse Web项目配置

    1.每次重开workspace都要重新配置一次 2.new web project之前配置 3.Windows-Preferences-(所有都要记得Apply) General   Maven P. ...

  9. .msi安装包安装方法(安装错误2503和2502)

    把鼠标放到Win8屏幕的最左下角,等待Win8 Metro界面的缩略图出现后点击鼠标右键,在弹出的菜单中选择“命令提示符(管理员)”在“命令提示符(管理员)”中输入 msiexec /package ...

  10. SpringtMVC中配置 <mvc:annotation-driven/> 与 <mvc:default-servlet-handler/> 的作用与源码解析

    基于 Spring4.X 来学习 SpringtMVC, 在学习过程中,被"告知"在 XML 配置文件中建议设置如下两项: 一直不明白为什么,但又甘心.于是,花了一点时间来调试源码 ...