【leetcode】4. Median of Two Sorted Arrays
2016-06-07 01:21
387 查看
题目描述:
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(c++)
- LeetCode4. Median of Two Sorted Arrays
- 【leetcode】4. Median of Two Sorted Arrays
- LeetCode题解:4. Median of Two Sorted Arrays
- Leetcode4. Median of Two Sorted Arrays_python,时间top15%
- Leetcode 4. Median of Two Sorted Arrays
- [LeetCode]4. Median of Two Sorted Arrays两个排序数组合并后的中位数
- leetcode题解-4. Median of Two Sorted Arrays
- leetcode: 4. Median of Two Sorted Arrays
- leetcode4. Median of Two Sorted Arrays
- [LeetCode]4. Median of Two Sorted Arrays
- [leetcode] 4. Median of Two Sorted Arrays 解题报告
- 4. Median of Two Sorted Arrays [LeetCode]
- 【LeetCode】4. Median of Two Sorted Arrays
- LeetCode4. Median of Two Sorted Arrays---vector实现O(log(m+n)--- findkth
- leetcode 4. Median of Two Sorted Arrays
- [Leetcode] 4. Median of Two Sorted Arrays 解题报告
- leetCode 4. Median of Two Sorted Arrays 解题思路和方法
- [LeetCode] 4. Median of Two Sorted Arrays
- 算法分析与设计——LeetCode:4. Median of Two Sorted Arrays