博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode题解-4-Median of Two Sorted Arrays
阅读量:6249 次
发布时间:2019-06-22

本文共 1364 字,大约阅读时间需要 4 分钟。

hot3.png

解题思路

这个题目是说在两个已排序的数组中找到中间的数,并且要求复杂度是O(ln(m+n))。看到这个复杂度要求,就不能使用简单的数组合并后取中间位置,而是要考虑类似二分法之类的算法。

算法的要点就是把题目转换成寻找第k个位置的数字,对于数组A和B,假设都长度都大于k/2,那么都取k/2的位置进行比较,假设A[k/2]小于B[k/2],那么A中k/2之前的位置都不可能是第k个位置,那么可以直接排除,问题转换成在A的k/2位置之后组成的数组和B数组中,寻找第k-k/2位置的数字。以此类推,就是一个递归实现了。

参考源码

public class Solution {    public double findMedianSortedArrays(int[] nums1, int[] nums2) {        int total = nums1.length + nums2.length;        if (total % 2 == 0) {            return (findKth(total / 2, nums1, 0, nums2, 0) + findKth(total / 2 + 1, nums1, 0, nums2, 0)) / 2.0;        } else {            return findKth(total / 2 + 1, nums1, 0, nums2, 0);        }    }    private int findKth(int k, int[] nums1, int s1, int[] nums2, int s2) {        if (s1 >= nums1.length) {            return nums2[s2 + k - 1];        }        if (s2 >= nums2.length) {            return nums1[s1 + k - 1];        }        if (k == 1) {            return Math.min(nums1[s1], nums2[s2]);        }        int k1 = s1 + k / 2 - 1 < nums1.length ? nums1[s1 + k / 2 - 1] : Integer.MAX_VALUE;        int k2 = s2 + k / 2 - 1 < nums2.length ? nums2[s2 + k / 2 - 1] : Integer.MAX_VALUE;        if (k1 < k2) {            return findKth(k - k / 2, nums1, s1 + k / 2, nums2, s2);        } else {            return findKth(k - k / 2, nums1, s1, nums2, s2 + k / 2);        }    }}

转载于:https://my.oschina.net/bonyfish/blog/843301

你可能感兴趣的文章
Javascript中封装window.open解决不兼容问题
查看>>
100%会用到的angularjs的知识点【新手可mark】
查看>>
Alinq学习日志
查看>>
根据框架的dtd或xsd生成xml文件
查看>>
LeetCode Notes_#3 Longest Substring Without Repeating Characters
查看>>
MVP MVVM MVC
查看>>
[BZOJ3684]大朋友和多叉树
查看>>
【Linux 驱动】第九章 与硬件通信
查看>>
方便记忆的电话号码
查看>>
OSGMFC
查看>>
JQuery开发的lightBox控件实例
查看>>
linux 文件查找,which,whereis,locate,find
查看>>
c c++ 宏定义中#, ##, #@的含义
查看>>
设计模式
查看>>
String、StringBuffer和StringBuilder
查看>>
NioSocket的用法
查看>>
HDU1231(DP)
查看>>
第四章 图像的灰度变换
查看>>
[实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表
查看>>
linux之sed用法
查看>>