【Leetcode】两个有序数组,求第k大的数
生活随笔
收集整理的這篇文章主要介紹了
【Leetcode】两个有序数组,求第k大的数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
雙指針:
方法二:
要找第兩個數組的第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】大神總結的所有TopK問題模板(基于快速排序)
?【Leetcode】二分法左側邊界右側邊界模板
?【Leetcode】338. 比特位計數(動態規劃)
總結
以上是生活随笔為你收集整理的【Leetcode】两个有序数组,求第k大的数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php怎样创建csv文件,如何使用PHP
- 下一篇: bash 抓捕异常_SHELL异常处理(