【LeetCode 4】寻找两个有序数组的中位数
【题解】
假设在两个有序的序列中找第k小的数字。 【代码】 寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ... 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ... 题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 ... 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ... 小知识 INT_MIN在标准头文件limits.h中定义. #define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1) 题解思路 其实是类似的二分 ... 最优解O(log(min(m,n))) /** 之前用合并有序数组的思想做了O((m+n+1)/2),现在试一试O(log(min(m,n))) 基本思路为:通过二分查找较小的数组得到对应的中位数(假 ... 4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ... Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定两个大小为 m 和 n 的有序数组 nums1 和* nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O( ... 4. 寻找两个有序数组的中位数 https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 最简单的就是用最简单的,把两个数组分别抽出然 ... 题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和  ... Nacos是阿里巴巴开源的服务发现与配置管理项目,本次发布的1.1.4版本,主要带来的是与Istio的对接功能,使用的是Istio最新的MCP协议.本文将介绍包括这个功能在内的新版本发布的功能. 升级 ... 一.初始化GPIO 使用PB1,查芯片手册对应TIM3_CH4 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2 ... 一.GPIO设置USART的初始化 /**************************实现函数******************************************** *函数原型: ... 之前一片文章中我们介绍了OC中的两个关键字@property和@synthesize的使用的使用: http://blog.csdn.net/jiangwei0910410003/article/de ... /** * 生成pdf * @param string $html 需要生成的内容 */ function pdf($html='<h1 style="color:red"& ...  golang图书,在线阅读Go轻松学https://www.golang123.com/book/16 Go示例学https://www.golang123.com/book/17 Go Web 编 ... 如果要使用$location,$stateParams,那么必须有相应形参controller: function ($rootScope, $http, $scope, $state,$locati ... dp的刷表法和填表法 参考: 动态规划刷表法 - acmer_xue的博客 - CSDN博客http://blog.csdn.net/qq_30241305/article/details/52198 ... 一. 什么是抽象类及什么是抽象方法 抽象方法是一种特殊的方法:他只有声明,而没有具体实现,抽象方法的声明格式为: abstract void funName(); 抽象方法必须用 abstract 修 ... SELECT * FROM PORT_EMP WHERE NO='18336309966'SELECT * FROM PORT_DEPT WHERE no='42DBAF50712C4046B09BC ...
那么我们先定位第一个序列中的第k/2个数字(不足则取最边上的那个数字)记下标为i1
然后定位第二个序列中的第k/2个数字(同样不足则取最边上的那个数字)记下标为i2
如果a[i1]class Solution {
public:
    int n,m;
    double findkth(vector<int> &nums1,vector<int> &nums2,int l1,int r1,int l2,int r2,int k){
        if (l1>r1) return nums2[l2+k-1];
        if (l2>r2) return nums1[l1+k-1];
        if (k==1) return min(nums1[l1],nums2[l2]);
        int temp = k/2;
        int i1 = l1+temp-1;
        int i2 = l2+temp-1;
        if (i1>r1) i1 = r1;
        if (i2>r2) i2 = r2;
        if (nums1[i1]<nums2[i2]){
            //把l1..i1全删掉
            return findkth(nums1,nums2,i1+1,r1,l2,r2,k-(i1-l1+1));
        }else{
            //把l2..i2全删掉
            return findkth(nums1,nums2,l1,r1,i2+1,r2,k-(i2-l2+1));
        }
    }
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        n = nums1.size();m = nums2.size();
        if ((n+m)%2==1){
            return findkth(nums1,nums2,0,n-1,0,m-1,(n+m+1)/2);
        }else{
            double temp = findkth(nums1,nums2,0,n-1,0,m-1,(n+m)/2);
            temp+=findkth(nums1,nums2,0,n-1,0,m-1,(n+m)/2+1);
            temp/=2;
            return temp;
        }
    }
};
【LeetCode 4】寻找两个有序数组的中位数的更多相关文章
	
						
	
随机推荐