LeetCode Median of Two Sorted Arrays
来源:互联网 发布:groovy编程 编辑:程序博客网 时间:2024/06/07 17:34
Description:
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)).
Solution:
这道题目是我目前在LeetCode上面debug最多的一道了……二分区间对于边界的掌握条件一定要很清楚,加一减一很复杂。下面讲一下思路。
nums1 = [s1 ... mid1-1], [mid1 ... e1] = {seg1, seg2}
nums2 = [s2 ... mid2-1], [mid2 ... e2] = {seg3, seg4}
每次可以这么判断:
如果两个array的前半段的长度 之和 >k, 那么k肯定不会在 nums1的后半段或者nums2的后半段,下面就判断哪一个不可能。len(seg1+seg3) < k。
如果nums1[mid1]大于nums2[mid],那么大小可以认为是这样:
seg3 < nums1[mid1] <= seg2
此时我们有
seg1 < seg2
seg3 < seg2
seg1 + seg3 < k
因为并不知道seg1和seg4的关系,但是无论如何,我们都能得出结论:此时第k大肯定不在seg2中,因此排除seg2。
后面的三种情况类似。
对于二分查找区间的问题,stopping criteria和bound都需要特别注意。
<span style="font-size:18px;">public class Solution {public int findKthSmaller(int[] nums1, int[] nums2, int s1, int e1, int s2,int e2, int k) {if (s1 >= e1)return nums2[s2 + k - 1];if (s2 >= e2)return nums1[s1 + k - 1];if (k <= 1)return Math.min(nums1[s1], nums2[s2]);int mid1 = (s1 + e1) / 2;int mid2 = (s2 + e2) / 2;if (mid1 - s1 + mid2 - s2 + 1 < k) {if (nums1[mid1] > nums2[mid2])return findKthSmaller(nums1, nums2, s1, e1, mid2 + 1, e2, k- (mid2 - s2 + 1));elsereturn findKthSmaller(nums1, nums2, mid1 + 1, e1, s2, e2, k- (mid1 - s1 + 1));} else {if (nums1[mid1] > nums2[mid2])return findKthSmaller(nums1, nums2, s1, mid1, s2, e2, k);elsereturn findKthSmaller(nums1, nums2, s1, e1, s2, mid2, k);}}public double findMedianSortedArrays(int[] nums1, int[] nums2) {int n = nums1.length;int m = nums2.length;if ((n + m) % 2 != 0)return findKthSmaller(nums1, nums2, 0, n, 0, m, (n + m) / 2 + 1);int k1 = (n + m) / 2;int k2 = (n + m) / 2 + 1;k1 = findKthSmaller(nums1, nums2, 0, n, 0, m, k1);System.out.println();k2 = findKthSmaller(nums1, nums2, 0, n, 0, m, k2);System.out.println();return 1.0 * (k1 + k2) / 2;}}</span>
0 0
- LeetCode: Median of Two Sorted Arrays
- LeetCode Median of Two Sorted Arrays
- leetcode 26: Median of Two Sorted Arrays
- Leetcode 4 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 Median of Two Sorted Arrays
- LeetCode-Median of Two Sorted Arrays
- [LeetCode] Median of Two Sorted Arrays
- [LeetCode] Median of Two Sorted Arrays
- [leetcode] Median of Two Sorted Arrays
- leetcode-004:Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- leetcode之 median of two sorted arrays
- 【转载】【leetcode】Median of Two Sorted Arrays
- LeetCode - Median of Two Sorted Arrays
- [LeetCode]Median of Two Sorted Arrays
- 固定端口的socket通信
- ubuntu14.10,安装ksnapshot(截图软件)
- Huffman编码实现压缩、解压文件
- 在多重循环中brak与break to的作用对比
- 组合逻辑形成毛刺
- LeetCode Median of Two Sorted Arrays
- 90005---Java输出数组的内容
- java.lang.ArrayIndexOutOfBoundsException: 2
- 欢迎使用CSDN-markdown编辑器
- linux系统IPC浅谈
- 01JsDom--操作DOM的意义
- athgina.dll 已停用欢迎屏幕和快速用户切换 系统菜单 头像 不显示
- 初学IOS开发记录
- 《像计算机科学家一样思考JAVA》书摘