leetcode4. Median of Two Sorted Arrays
从两个排好序的数组中取得中位数,那么当个数为偶数的话就是最中间两个数的平均值了,否则的话就是最中间的数。 那么如何取得最中间的数呢?
考虑新建一个函数findKth表示在这些中间寻找第k个数的,那么分别从nums1的i起始位置和nums2的j起始位置来检索的,考虑特殊情况下的返回值的。以及利用递归来比较在两个不同数组中的可能值来进行递归返回。
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int tot=nums1.size()+nums2.size(); if(tot%2==1){ return findKth(nums1,0,nums2,0,tot/2+1); }else{ return (findKth(nums1,0,nums2,0,tot/2)+findKth(nums1,0,nums2,0,tot/2+1))/2.0; } } double findKth(vector<int>& nums1,int i, vector<int>& nums2,int j, int k){ if(nums1.size()-i>nums2.size()-j) return findKth(nums2,j,nums1,i,k); if(nums1.size()==i) return nums2[j+k-1]; if(k==1) return min(nums1[i],nums2[j]); int pa=min(int(nums1.size()),i+k/2), pb=j+k-pa+i; if(nums1[pa-1]<nums2[pb-1]){ return findKth(nums1,pa,nums2,j,k-pa+i); }else if(nums1[pa-1]>nums2[pb-1]){ return findKth(nums1,i,nums2,pb,k-pb+j); }else{ return nums1[pa-1]; } } };
posted on 2018-09-11 15:28 昔风不止,唯有努力生存 阅读(90) 评论(0) 编辑 收藏 举报