leetcode 第4题

中位数技巧:
对于长度为L的有序数组,它的中位数是(a[ceil((L+1)/2)]+a[floor((L+1)/2)])/2

算法原理:
类似三分法求极值
两个人都前进,谁前进之后比较小,就让谁前进。

import mathclass Solution(object):def findpos(self, x, nums1, nums2):a, b = 0, 0l = len(nums1) + len(nums2)while a + b < x:# print(a, b, '==')if a == len(nums1):b = x - abreakif b == len(nums2):a = x - bbreakstep = math.ceil((x - a - b) / 2)pos1 = min(a + step, len(nums1))pos2 = min(b + step, len(nums2))v1 = nums1[pos1 - 1]v2 = nums2[pos2 - 1]if v1 < v2:a = pos1else:b = pos2if a == 0:return nums2[b - 1]elif b == 0:return nums1[a - 1]else:return max(nums1[a - 1], nums2[b - 1])def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""l = len(nums1) + len(nums2)return (self.findpos(math.floor((l + 1) / 2), nums1, nums2) + self.findpos(math.ceil((l + 1) / 2), nums1,nums2)) / 2

转载于:https://www.cnblogs.com/weiyinfu/p/7469428.html

两个有序数组求中位数log(m+n)复杂度相关推荐

  1. 【两个有序数组求中位数】

    /* 两个有序数组求中位数问题; 这个题有很多方法: 方法一:排序,找到中位数: 方法二:归并排序的思想 方法三:转换成求第k小值   */ /* 思路:使用二分查找,时间复杂度为log(m+n). ...

  2. Leetcode算法题:两个有序数组求中位数

    Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...

  3. 两个有序数组求中位数的三种解法

    寻找两个有序数组的中位数(附上三种解法)_BoCong-Deng的博客-CSDN博客_两个有序数组求中位数

  4. 算法题:两个有序数组求中位数

    leetcode上遇到的一道题,感觉很有意思 因为要求O(log(m+n)),所以第一反应时用二分来找,但是该怎么用二分呢? 数组A,B分别有序,我们可以先找到数组A中的一条分界线i,使得数组A分为A ...

  5. 利用分治法求两个有序数组的中位数

    也是看了一篇很好的博客,思路很清晰,只是有些地方感觉博主没有详细解释,后来理解了,做了一个小总结.原博客链接:点击打开链接 题目还是昨天的那道题目: 给定两个大小为 m 和 n 的有序数组 nums1 ...

  6. LeetCode实战:寻找两个有序数组的中位数

    题目英文 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...

  7. 算法--------------------寻找两个有序数组的中位数

    题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假设 nums1 和 num ...

  8. 4. 寻找两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  9. leetcode 4. 寻找两个有序数组的中位数,c语言

    leetcode上第四道题,如下. 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假 ...

最新文章

  1. 腾讯AI击败王者荣耀职业队,全靠自学、策略清奇,一天训练量为人类440年
  2. python自动化测试视频百度云-Python接口自动化测试 PDF 超清版
  3. “六神”——技术提高开发效率的一个方案
  4. [java] javax.el.PropertyNotFoundException: Property 'id' not found on type bean.Student
  5. 【三种解法实现】剑指 Offer 03. 数组中重复的数字
  6. Linux(Ubuntu) lib 缺失问题
  7. Git Branch Mode(分支模式)
  8. bzoj2821 作诗(Poetize)分块+二分
  9. 裕-C#过滤DataTable中的空数据和重复数据
  10. 使用no-gui 模式执行分布式测试
  11. 一年成为ai算法工程师_我作为一名数据科学研究员所学到的东西在一年内成为了AI领导者...
  12. STM32学习之SHT20温湿度传感器
  13. php公众号客服系统,公众号客服系统完全攻略
  14. Java 找不到符号 符号 类 SpringBootApplication
  15. MinGW-w64没有bin文件解决方法
  16. 网络安全求职该怎么写简历?
  17. 35岁是个坎,为啥到岁数就不想要你了
  18. 为什么博士后的年薪远远高于刚入职的大学老师?
  19. 3D Touch详细实例介绍之一
  20. cropped-p_large_a5mR_25c0000419eb2d0c.jpg

热门文章

  1. Spring中的观察者模式
  2. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器
  3. BZOJ2217 [Poi2011]Lollipop 【贪心】
  4. 洛谷3871 [TJOI2010]中位数 维护队列的中位数
  5. python str转dict
  6. 插入排序,二分查找插入排序,使用二叉树的插入排序
  7. 成都电子神技大学模拟题(取模运算)
  8. 【Java从0到架构师】Spring - 生命周期、代理
  9. 【Vue.js 知识量化】vue-router 详解
  10. core 实例化接口_实例讲解Springboot整合MongoDB进行CRUD操作的两种方式