第三周

Algorithm:

//两个数组的中位数
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;
        int total = len1 + len2;
        if ((total & 1) != 0) {
            return findKth(nums1, 0, len1 - 1, nums2, 0, len2 - 1, total / 2 + 1);
        } else {
            return (findKth(nums1, 0, len1 - 1, nums2, 0, len2 - 1, total / 2) + findKth(nums1, 0, len1 - 1, nums2, 0, len2 - 1, total / 2 + 1)) / 2.0f;
        }
    }

    private double findKth(int[] nums1, int start1, int end1, int[] nums2, int start2, int end2, int k) {
        int len1 = end1 - start1 + 1;
        int len2 = end2 - start2 + 1;
        if (len1 > len2) {
            return findKth(nums2, start2, end2, nums1, start1, end1, k);
        } else if (len1 == 0) {
            return nums2[start2 + k - 1];
        } else if (k == 1) {
            return Math.min(nums1[start1], nums2[start2]);
        }
        int ia = Math.min(k / 2, len1), ib = k - ia;
        if (nums1[start1 + ia - 1] > nums2[start2 + ib - 1]) {
            return findKth(nums1, start1, end1, nums2, start2 + ib, end2, k - ib);
        } else if (nums1[start1 + ia - 1] < nums2[start2 + ib - 1]) {
            return findKth(nums1, start1 + ia, end1, nums2, start2, end2, k - ia);
        } else {
            return nums1[start1 + ia - 1];
        }
    }

Tip:
HashMap的脚标寻址浅谈 https://www.jianshu.com/p/476271437d72
Share:
MySQL中普通索引与唯一索引的区别 https://time.geekbang.org/column/article/70848

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。