LeetCode:Median of Two Sorted Arrays

xiaoxiao2021-02-28  71

题目:

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

 给定两个已经排序好的数组,找到所有元素的中位数。要求时间复杂度为O(log (m+n)).

思路:

找到所有元素的中位数的问题可以转化为找第K大数的问题,我们可以用两个计数器p,q分别指向A,B数组的第一个元素,如果A数组的当前元素小,则p++,如果B数组的当前元素小,则q++,最终可以找到第K大的数。

代码:

class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int L1=nums1.size(); int L2=nums2.size(); int total=L1+L2; if(total%2) return findkth(nums1,nums2,total/2+1); else return (findkth(nums1,nums2,total/2)+findkth(nums1,nums2,total/2+1))/2.0; } double findkth(vector<int>& nums1, vector<int>& nums2,int k){ int p=0;int q=0; for(int i=0;i<k-1;i++){ if(p>=nums1.size()&&q<nums2.size()) q++; else if(q>=nums2.size()&&p<nums1.size()) p++; else if(nums1[p]<nums2[q]) p++; else q++; } if(p>=nums1.size()) return nums2[q]; else if(q>=nums2.size()) return nums1[p]; else return min(nums1[p],nums2[q]); } };
转载请注明原文地址: https://www.6miu.com/read-27149.html

最新回复(0)