【leetcode】4. Median of Two Sorted Arrays
题目描述:
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)).
解题思路:
这道题个人觉得是很难的,要想解出这个题,就必须了解一下几点:
1.求一列长度为len的数字的中位数,其实也可以被看做是求第len/2小的数(len为奇),或者求第len/2,len/2 +1小的数的平均值的数(len为偶);
2.同时还要注意若想求两个有序数组array1和array2中第n小的数,则可以取a,b满足a+b=n,则如果array1[a-1]<array2[b-1],则array1[a]必然小于第n小的数。可以将这些数排除后,继续求剩余的数中第n-a小的数就是所要的答案;
3.要想很快的缩小一个数的值到所求值,用折半的方法可以减少循环次数。
代码如下:
public class Solution {
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1=nums1.length;
int len2=nums2.length;
if(((len1+len2)&1)==0){
int count=(len1+len2)/2;
int num1=fun(nums1,0,nums2,0,count);
int num2=fun(nums1,0,nums2,0,count+1);
return (double)(num1+num2)/2;
}
else{
int count=(len1+len2)/2 +1;
int num=fun(nums1,0,nums2,0,count);
return (double)num;
}
}
public static int fun(int[] nums1,int from1,int[] nums2,int from2,int k){
//考虑到某个数组中的数已经全部被排除
if(from1>=nums1.length){
return nums2[from2+k-1];
}
if(from2>=nums2.length){
return nums1[from1+k-1];
}
//k=1即求最小,比较两个数组中的from位置处的值即可
if(k==1){
return nums1[from1]<nums2[from2]?nums1[from1]:nums2[from2];
}
//为了减少代码量,要保证nums1的长度要小于nums2的长度
if(nums1.length-from1>nums2.length-from2){
int[] nums=nums1;
int from=from1;
nums1=nums2;
from1=from2;
nums2=nums;
from2=from;
}
//nums1最好能截取k/2位置处的数,但要保证不能超过nums1中还存在的数的个数
int len1 = Math.min(nums1.length-from1, k/2);
//保证len1+len2=k;
int len2 = k -len1;
if(nums1[from1+len1-1]>=nums2[from2+len2-1]){
from2=from2+len2;
int result = fun(nums1,from1,nums2,from2,k-len2);
return result;
}
else{
from1=from1+len1;
int result = fun(nums1,from1,nums2,from2,k-len1);
return result;
}
}
}
【leetcode】4. Median of Two Sorted Arrays的更多相关文章
- 【LeetCode】4. Median of Two Sorted Arrays (2 solutions)
Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. Find t ...
- 【LeetCode】4. Median of Two Sorted Arrays 寻找两个正序数组的中位数
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:数组,中位数,题解,leetcode, 力扣,python ...
- 【LeetCode】004. Median of Two Sorted Arrays
题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 【LeetCode】4.Median of Two Sorted Arrays 两个有序数组中位数
题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 【LeetCode】4. Median of Two Sorted Arrays(思维)
[题意] 给两个有序数组,寻找两个数组组成后的中位数,要求时间复杂度为O(log(n+m)). [题解] 感觉这道题想法非常妙!! 假定原数组为a,b,数组长度为lena,lenb. 那么中位数一定是 ...
- 【一天一道LeetCode】#4 Median of Two Sorted Arrays
一天一道LeetCode (一)题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find th ...
- 【leetcode】1213.Intersection of Three Sorted Arrays
题目如下: Given three integer arrays arr1, arr2 and arr3 sorted in strictly increasing order, return a s ...
- 【LeeetCode】4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...
- 【medium】4. Median of Two Sorted Arrays 两个有序数组中第k小的数
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...
随机推荐
- Python 动态语言
1.在C++中,Animal a = Person(); 这样写是不行的,因为a的内容不能使用Person的内容来填充. 2.在Python中,变量不需要声明,而且可以赋任何值.Python是如何做到 ...
- Codeforces Round #332 (Div. 2) A. Patrick and Shopping 水题
A. Patrick and Shopping Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- Codeforces Gym 100203E E - bits-Equalizer 贪心
E - bits-EqualizerTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest ...
- spring mvc --自己定义converse
在MVC中我们能够非常轻松的依据项目需求进行必要的信息转换,如设置默认的日期格式,自己定义String类型的格式等等... 配置中我们须要自己定义converseService: <bean i ...
- Meteor 加入账户系统
Meteor 加入账户系统 我们给meteor加入一个账户系统 导入包 meteor add ian:accounts-ui-bootstrap-3 meteor add accounts-passw ...
- [WebGL] Setting Up WebGL
In this lesson we cover setting up WebGL for use, including creating a canvas, getting the WebGL ren ...
- yum服务器设置
转自:http://blog.chinaunix.net/uid-22141042-id-1789605.html 不得不说,RedHat的确很邪恶,如果我们直接用他自带的系统碟做YUM源的话,总是会 ...
- javascript数组总结(0504)
一:数组复制 //方法一//slice()函数将会返回一个新的数组对象 var arr = [1,2,3,4]; var clone = arr.slice(0); arr.splice(1,2);/ ...
- SQLServer 之 常用函数及查看
一.查看 (1)应用程序名称 SELECT APP_NAME() (2)获取登录者名字 SELECT SUSER_NAME() (3)获取字段定义的长度 ...
- 创建FILE GEODATABASE 和栅格目录及向栅格目录中添加影像
using System;using System.IO;using ESRI.ArcGIS.DataSourcesGDB;using ESRI.ArcGIS.DataSourcesRaster;us ...