Leetcode4. Median of Two Sorted Arrays

Leetcode4. Median of Two Sorted Arrays

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


int findKth(int A[], int B[], int k, int aStart,int aEnd,
            int bStart, int bEnd)
{
    int aLen = aEnd - aStart + 1;
    int bLen = bEnd - bStart + 1;
    if(aLen == 0) return B[bStart + k];
    if(bLen == 0) return A[aStart + k];
    if(k == 0) return A[aStart] < B[bStart] ? A[aStart] : B[bStart];
    int aMid = aLen * k / (aLen + bLen);
    int bMid = bLen * k / (aLen + bLen);
    aMid += aStart;
    bMid += bStart;
    if(A[aMid] > B[bMid])
    {
        k = k - (bMid - bStart + 1);
        aEnd = aMid;
        bStart = bMid + 1;
    }
    else
    {
        k = k - (aMid - aStart + 1);
        bEnd = bMid;
        aStart = aMid + 1;
    }
    return findKth(A, B, k, aStart, aEnd, bStart, bEnd);
}
double findMedianSortedArrays(int A[], int B[])
{
    int m = alength;
    int n = bLength;
    if((m + n) % 2 != 0)
        return (double)findKth(A, B, (m+n) / 2, 0, m-1, 0, n-1);
    else
    {
        return (
                   (findKth(A, B, (m + n) / 2, 0, m - 1, 0, n - 1) +
                    findKth(A, B, (m + n) / 2-1, 0, m - 1, 0, n - 1))*0.5
               );
    }
}

在《Java编程思想》P86页有这样一段话:


  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”

  这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:

  方便在没有创建对象的情况下来进行调用(方法/变量)。

  很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

  static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

  static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。


  但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值