LeetCode4. 寻找两个有序数组的中位数
Posted Alan_Fire
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode4. 寻找两个有序数组的中位数相关的知识,希望对你有一定的参考价值。
给定两个大小为 m 和 n 的有序数组 nums1
和 nums2
。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1
和 nums2
不会同时为空。
示例 1:
nums1 = [1, 3] nums2 = [2] 则中位数是 2.0
示例 2:
nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5
分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 log 级别。回顾下中位数,对于一个有序数组,如果数组长度是奇数,那么中位数就是中间那个值,如果长度是偶数,就是中间两个数的平均数。
二分查找:两个指针扫一下,每次选小的,找到第mid个,就是中位数。
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int length1 = nums1.size(); int length2 = nums2.size(); int mid = (length1+length2)/2; int s = 0; int l = 0; int r = 0; int now = 0; int pre = 0; while(s<=mid && l<length1 && r<length2){ pre = now; if(nums1[l]<nums2[r]){ now = nums1[l]; l++; }else{ now = nums2[r]; r++; } s++; } while(s<=mid && l<length1){ pre = now; now = nums1[l]; l++; s++; } while(s<=mid && r<length2){ pre = now; now = nums2[r]; r++; s++; } if((length1+length2)!=mid*2){ return now; }else{ return 1.0*(now+pre)/2; } } };
以上是关于LeetCode4. 寻找两个有序数组的中位数的主要内容,如果未能解决你的问题,请参考以下文章