双指针:

def func(num1,num2,k):i,j,n = 0,0,0while i<len(num1) or j<len(num2):n += 1if i<len(num1) and j<len(num2):if num1[i] < num2[j]:if n == k:return num1[i]i += 1else:if n == k:return num2[j]        j += 1                    elif i<len(num1):if n == k:return num1[i]i += 1                else:if n == k:return num2[j]       j += 1                 print(func([1,5,8],[2,3,4],6))

方法二:
要找第两个数组的第k大,可以找num1[k/2], 和num2[k/2],如果这俩相等,那他俩就是第k大。
比如在下面的俩数组中找第4大的,我们发现num1的第2个和num2的第2个相等,那就返回 [3] 就好了。

num1 = [1,3,5]
num2 = [2,3,4]

如果num1的第2个 > num2的第2个,那就不要num2的前俩了,因为肯定不是第4大。然后把num2剩余的元素,也就是[4]放入下一次递归,此时k = 4 - 2 = 2,因为已经排除俩了。

num1 = [1,3,5]
num2 = [1,2,4]

反之亦然,这里值得注意的是,如果k是奇数,由于python取整的原因,k/2需要改成:num1[k//2], 和num2[k-k//2]

再由于python 从0开始计数,再改成 num1[k//2-1], 和num2[k-k//2-1]

整体代码如下:

def func2(num1,num2,k):if k == 1:return min(num1[0], num2[0])if not num1:return num2[k-1]if not num2:return num1[k-1]k1 = k // 2k2 = k - k1if num1[k1-1] > num2[k2-1]:return func2(num1, num2[k2:], k-k2)else:return func2(num1[k1:], num2, k-k1)print(func2([1,5,8],[2,3,4],6))

猜你喜欢:

【Leetcode】两个有序数组,求第k大的数相关推荐

  1. 【leetcode】找出数组的第k大的数

    用快排,原始的快排 def quick_sort(nums,l,r):if l<=r:returntmp = nums[0]while l<r: while l<r and nums ...

  2. O(logn)在两个有序数组找第k小的数

    我们有两个有序数组,A[1+n],B[1+n],下标从1开始. logn显然就是二分折半. 设la=1,ra=n,lb=1,rb=n; mida=(la+ra)/2,midb=(lb+rb)/2; 我 ...

  3. 无序数组求第k大的数 python_整数无序数组求第K大数

    import java.util.Scanner; /** * 类似与求第k小的问题 * 求第k大相当于求第n-k+1小,n为数组长度 * * 著名的BFPRT算法可保证在线性时间内得到结果. * h ...

  4. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数

    使用堆 import heapq def findKthLargest(nums, k): stack = [] for num in nums: heapq.heappush(stack, num) ...

  5. 单峰数组求第k大算法

    单峰数组实际上可以看成两个有序的数组,这个问题就转变成了两个有序数组求第k大. 容易想到的算法是对这两个数组进行归并,生成一个新的有序数组,求出第k大之后就可以立刻停止,复杂度是O(k)的. 但是还有 ...

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

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

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

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

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

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

  9. 求无序数组的第K(大/小)数的三种方法

    题目描述:给定一个无序数组(长度为n)和一个正整数 K,让你求此数组中第K大的数 方法1:最简单的思路,你肯定会想到 先把数组排序,然后再取下标为K的对应数组元素.这种方法肯定是可行的,但是这种方法无 ...

  10. 算法题 求第K大的数

    题目描述:在乱序数组中求第K大的数 思路:立刻想到的是当然先排序然后取数.但是提问者明显不是想这么解.上网查了下原来是快排思路. 利用快排的思想,从数组arr中随机找出一个元素X,把数组分成两部分ar ...

最新文章

  1. 新零售模式开启,2018杭州无人店展览会
  2. 拒绝了对对象 'XXX' (数据库 'XXX',架构 'dbo')的 SELECT 权限
  3. 引入spring-boot-starter-actuator,控制台没有mapper的映射信息打印问题
  4. Java环境变量之Path和classpath
  5. 笔记之_java整理JavaScript
  6. mysql批量导入数据脚本_MySQL数据库批量导入脚本
  7. 侵犯我的肖像权及其严重!!强烈禁止使用本人真实头像!!
  8. 使用AD13设计PCB的技巧总结
  9. WPF3D图片轮播效果
  10. Alacritty主题配置
  11. 经典同态加密算法Paillier解读 - 原理、实现和应用
  12. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)
  13. 【创建Messages】
  14. 论文研读-图可视化-NetV.js:Web端可视化工具库
  15. css获取时间,改变CSS 样式,获取当前日期
  16. FlexE( Flex Ethernet灵活以太网)
  17. 1、Windows如何删除右键新建菜单中的某些选项
  18. 如何高效管理企业的海量固定资产?
  19. LabVIEW编程LabVIEW开发使用LabVIEW访问Microsoft Access
  20. 用户体验时代 Mist带来云托管Wi-Fi新思路

热门文章

  1. 3DMAX 处理反面
  2. 18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建
  3. 内存分配与数据格式化(malloc与new)
  4. 解压bzi2文件出错,分析和处理
  5. oracle数据库从入门到精通之三
  6. Bootstrap3 表格-鼠标悬停
  7. adb shell 命令详解,android, adb logcat
  8. 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数...
  9. Cocos2d-x 在缓存创建图片
  10. hdu 4430 Yukari's Birthday (简单数学 + 二分)