剑指offer(中位数-LeetCode4)

来源:互联网 发布:电钢琴选购知乎 编辑:程序博客网 时间:2024/06/03 16:34

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

求中位数,给了两个例子。总结来看就是总数是偶数还是奇数。

奇数:(m+n)/2求得中间数,它是第(m+n)/2+1个数。这个值在我们利用归并思想解题时使用。

偶数:(m+n)/2、(m+n)/2+1。这两个数也就是第(m+n)/2、(m+n)/2+1个数。

利用归并思想查找到第k个数,按照运算规则即可。

 double findK(vector<int>&a,int lena,vector<int>&b,int lenb,int k)    {        int i=0,j=0;        for(;i<lena&&j<lenb;)        {            k--;            if(a[i]<b[j])            {                if(k==0)                return a[i];                i++;            }            else if(k==0)            return b[j];            else            j++;        }        return i>=lena?b[j+k-1]:a[i+k-1];    }    double findMedianSortedArrays(vector<int>&nums1, vector<int>&nums2) {        int m=nums1.size(),n=nums2.size();        return ((m+n)&1)?findK(nums1,m,nums2,n,(m+n+1)>>1):        ((findK(nums1,m,nums2,n,(m+n)>>1)+findK(nums1,m,nums2,n,((m+n)>>1)+1))*0.5);    }
       本来没什么说的,可昨天晚上看的题目,今天来做的。我有点记答案的嫌疑。表现在写归并的时候,貌似为了做题而去做题。这样没有效果,不如不做。第二个问题是在偶数计算的时候,那么多括号要加,为此浪费了时间。关键debug的能力没跟上,归并返回值那里居然写的是lena<=0。这个不能忍,压根没理解,写毛代码!总结:

       1.真的理解才去写代码。

       2.柳暗花明是需要扫描定位错误,而不是困在一个死胡同里。

0 0
原创粉丝点击