Leetcode刷题记—— 4. Median of Two Sorted Arrays(两有序数组的中位数)
来源:互联网 发布:dm是什么软件 编辑:程序博客网 时间:2024/05/23 01:59
一、题目叙述:
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
Subscribe to see which companies asked this question.
二、解题思路:
Hard题。&参考。
思路:
主要问题在时间复杂度的要求上,否则直接排序,返回中位数就可以。
使用二分查找、递归的思想。
其实问题就是在两有序数组中找第K小的元素。
假设两数组长度均大于等于 k/ 2。比较nums1[s1 + k / 2 - 1]及nums2[s2 + k/2 -1]若 nums1[s1 + k / 2 - 1]<nums2[s2 + k/2 -1],那么nums1中的 下标为s1 到 s1 + k / 2 - 1就可以排除了,反之亦然。
若 两数组中有一数组为空, 那么直接返回另一数组第k个元素值即可。
若 k 为1 ,那么返回两数组较小的第一个元素即可。
三、源码:
public class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int q = nums1.length + nums2.length; if (q % 2 == 0) return (findk(nums1, 0, nums2, 0, q / 2 + 1) + findk(nums1, 0, nums2, 0, q / 2)) / 2.0; else return findk(nums1, 0, nums2, 0, q / 2 + 1) / 1.0; } private int findk(int[] nums1, int s1, int[] nums2, int s2, int k) { if (s1 >= nums1.length) return nums2[s2 + k - 1]; if (s2 >= nums2.length) return nums1[s1 + k - 1]; if (k == 1) return Math.min(nums1[s1], nums2[s2]); int m1 = s1 + k / 2 - 1; int m2 = s2 + k / 2 - 1; int a1 = m1 < nums1.length? nums1[m1] : Integer.MAX_VALUE; int b1 = m2 < nums2.length? nums2[m2] : Integer.MAX_VALUE; if (a1 < b1) return findk(nums1, m1 + 1, nums2, s2, k - k / 2); else return findk(nums1, s1, nums2, m2 + 1, k - k / 2); } public static void main(String[] args) { Solution so = new Solution(); System.out.println(so.findMedianSortedArrays(new int[]{1, 2},new int[]{3,4})); }}
0 0
- 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两个有序数组的中位数
- 两个有序数组的中位数 Median of Two Sorted Arrays
- Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode
- Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode
- LeetCode OJ 之 Median of Two Sorted Arrays(两个有序数组的中位数)
- [leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数
- [Leetcode #4]Median of Two Sorted Arrays 计算两个有序数组的中位数
- [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数
- LeetCode OJ:Median of Two Sorted Arrays(两个有序数组的中位数)
- LeetCode 4 : Median of Two Sorted Arrays ---- 两排序数组的中位数
- 4. Median of Two Sorted Arrays 两个有序数组的中位数
- 算法练习4.Median of Two Sorted Arrays两个有序数组的中位数(递归、分治)
- LeetCoder 4. Median of Two Sorted Arrays (有序数组合并的中位数)
- 4. Median of Two Sorted Arrays(两个有序数组的中位数)
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- hdu 2200 Eddy's AC难题
- 深入理解C语言的函数调用过程
- 【java】绘制图形
- leetcode题解-88. Merge Sorted Array
- 发布两个高精计算公式
- Leetcode刷题记—— 4. Median of Two Sorted Arrays(两有序数组的中位数)
- for循环创建一维数组
- U3D打PC包的设置
- 【快捷导航】updating...
- 【Spring学习28】JavaConfig配置bean
- 长尾理论及其启示
- 360一面面试题
- spring整合quartz框架定时任务实战
- OpenFace库(Tadas Baltrusaitis)中基于HOG进行正脸人脸检测的测试代码