LeetCode 4. Median of Two Sorted Arrays(两个有序数组的中位数)
2016-05-01 15:39
495 查看
原题网址:https://leetcode.com/problems/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)).
方法:采用二分法查找。
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)).
方法:采用二分法查找。
public class Solution { private int median(int[] nums1, int[] nums2, int k) { if (nums1.length == 0) return -1; if (nums2.length == 0) return k; int i=0, j=nums1.length-1; while (i<=j) { int m = (i+j)/2; int n = k-m; if (n < 0) j=m-1; else if (n>nums2.length) i=m+1; else if (n == nums2.length) { if (nums2[n-1] <= nums1[m]) return m; i=m+1; } else if (n == 0) { if (nums1[m] <= nums2 ) return m; j=m-1; } else { if (nums2[n-1] <= nums1[m] && nums1[m] <= nums2 ) return m; if (nums2[n-1] > nums1[m]) i=m+1; if (nums1[m] > nums2 ) j=m-1; } } return -1; } public double findMedianSortedArrays(int[] nums1, int[] nums2) { int n = nums1.length+nums2.length; if (n % 2 == 0) { int m1 = median(nums1, nums2, n/2-1); int median = 0; if (m1 != -1) median = nums1[m1]; else median = nums2[median(nums2, nums1, (n-1)/2)]; int m2 = median(nums1, nums2, n/2); if (m2 != -1) median += nums1[m2]; else median += nums2[median(nums2, nums1, n/2)]; return (double)median/2; } else { int m = median(nums1, nums2, (n-1)/2); if (m != -1) return nums1[m]; return nums2[median(nums2, nums1, (n-1)/2)]; } } }
相关文章推荐
- 第 29 章 CSS3 弹性伸缩布局[上]
- 我的大学规划
- 读《Spring-技术内幕》-第二章:IoC容器的实现-1
- C语言编程程序的内存如何布局
- Genymotion 从注册到安装到运行到调试
- C++随笔
- PAT 1006. 换个格式输出整数 (15)
- 20145327 《Java程序设计》第九周学习总结
- day56-Spark SQL和DataFrame的本质
- 欢迎使用CSDN-markdown编辑器
- C 的布尔值
- PAT(Basic Level) 完美数列(25)
- apache+tomcat负载均衡
- 设置手机iphone5s邮件
- eclipse build workspace太慢或者 js出错问题解决
- Linux内核学习总结
- HTML学习小结
- make a list of your fans
- 第九周进度条
- Elasticsearch分布式搜索集群配置