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

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

There are two sorted arrays A and B 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)).

Show Tags

题意:求两个有序数组的组成一个新的数组的中位数

思路:题目转换为求第k大的数。假设总个数是奇数的话,就是求第中间的数了,假设是偶数的话。就是找到两个中间的,求平均数。

求第k大的数:首先如果我们求的是两个数组A和B中第k个数。为了我们每次都能折半查找,我们比較A[k/2]和B[k/2]这两个数,如果A[k/2-1]<B[k/2-1]的话。说明的是A数组的前k/2个数字都是在最后数组的前k个中,那么就能够裁掉一点了,依次类推

class Solution {public:    double findMedianSortedArrays(int A[], int m, int B[], int n) {        int size = m + n;        int k = (m + n + 1) / 2;        if (size & 1)            return findKth(A, m, B, n, k);        else return (findKth(A, m, B, n, k) + findKth(A, m, B, n, k+1)) / 2;    }        double findKth(int A[], int m, int B[], int n, int k) {        if (m > n)            return findKth(B, n, A, m, k);        if (m == 0)            return B[k - 1];        if (k == 1)            return A[0] < B[0] ? A[0] : B[0];                int index = k / 2;          int left = index < m ?

index : m; int right = k - left; if (A[left - 1] < B[right - 1]) return findKth(A + left, m - left, B, n, right); else if (A[left - 1] > B[right - 1]) return findKth(A, m, B + right, n - right, left); else return A[left - 1]; } };

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
Eclipse常用配置
查看>>
linux修改IP和DNS
查看>>
我的友情链接
查看>>
WordPress新增Page的模版文件
查看>>
WP移动设备压缩与解压控件Xceed Zip for .NET Compact Framework控件下载及详细介绍使用方法...
查看>>
proc文件系统探索 之 根目录下的文件[六]
查看>>
搭建ICINGA监控
查看>>
DataSet
查看>>
第三方分享功能
查看>>
Quartz.NET 前一次任务未执行完成时不触发下次的解决方法
查看>>
SQL中的null值
查看>>
python unittest之断言及示例
查看>>
online_judge_1106
查看>>
JAVA_内部类
查看>>
jxl 导入excel
查看>>
Mysql之performance Schema
查看>>
虚拟机linux上网问题
查看>>
XMLHttpRequest - 原始AJAX初步
查看>>
laravel/lumen 单元测试
查看>>
csu2161: 漫漫上学路(Hash+最短路)
查看>>