LeetCode #4
来源:互联网 发布:淘宝上好看的包包店 编辑:程序博客网 时间:2024/05/22 00:35
题目描述:
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
此题为hard难度,需要满足时间复杂度为O(log(m+n)),所以应该采用二分法。由于两个数组是有序的,可以令k=(m+n)/2,比较两个数组的前k/2个元素,如果nums1[k/2-1]>nums2[k/2-1],可以确定在nums1的0到(k/2-1)共k/2个元素中,必定不存在两个数组的中位数,可以直接除去这k/2个元素,反之同理。然后进行递归,求剩下两个数组的第k/2个元素,相当于是对k进行了二分,所以时间复杂度为O(log(m+n)),当k=1时即可直接求解。同时还要注意一些例外的情况,比如当一个数组元素为空时,就直接求另外一个数组的第k个元素即可,还有就是如果一个数组元素个数小于k/2时,直接取这个数组最后一个元素和另一个数组进行比较。这种方法不止对求两个有序数组的中位数有效,求任意第k个值都可以。
class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m=nums1.size(); int n=nums2.size(); if((m+n)%2==1) return findKth(nums1,nums2,(m+n)/2+1); else return (findKth(nums1,nums2,(m+n)/2)+findKth(nums1,nums2,(m+n)/2+1))/2; } double findKth(vector<int> nums1, vector<int> nums2, int k) { int m=nums1.size(); int n=nums2.size(); if(m==0) return nums2[k-1]; else if(n==0) return nums1[k-1]; if(k==1) return min(nums1[0],nums2[0]); int i=min(m,k/2); int j=min(n,k/2); if(nums1[i-1]>nums2[j-1]) { vector<int> nums(nums2.begin()+j,nums2.end()); return findKth(nums1,nums,k-j); } else if(nums1[i-1]<=nums2[j-1]) { vector<int> nums(nums1.begin()+i,nums1.end()); return findKth(nums2,nums,k-i); } }};
阅读全文
0 0
- LeetCode-4
- LeetCode--4
- LeetCode(4)
- LeetCode-4*
- LeetCode(4)
- leetcode 4
- LeetCode #4
- LeetCode(4)
- LeetCode: 4 Sum
- LeetCode: 4Sum
- LeetCode 4Sum
- Leetcode: 4SUM
- 【leetcode】 4 sum
- LeetCode 4Sum
- leetcode 44: 4Sum
- [Leetcode] 4 Sum [Unsolved]
- 【leetcode】4Sum
- [LeetCode]4Sum
- java lambad表达式
- Ubuntu14.04安装CUDA8.0折腾之路
- 《C++ Concurrency in Action》笔记3 move线程对象
- 关于就业的一些思考
- Android编程注意事项一常见空指针异常小结
- LeetCode #4
- java.lang.OutOfMemoryError: PermGen space Tomcat内存溢出处理
- JSP/EL/JSTL
- 基于AES对称加密解密的代码块
- 初学hadoop的个人经验
- 树形DP HDU 3899
- 禁止进入activity后EditText自动获得焦点的方法
- MFC--Tab Control
- 不同版本(2.3-3.1)web.xml文件的schema头部声明