日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Leetcode】大神总结的所有TopK问题模板(基于快速排序)

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Leetcode】大神总结的所有TopK问题模板(基于快速排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本思想

通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

實現原理

整個數組找基準正確位置,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面。

Partition函數

首先,先寫partition模板

def partition(nums, left, right):pivot = nums[left]#初始化一個待比較數據i,j = left, rightwhile(i < j):while(i<j and nums[j]>=pivot): #從后往前查找,直到找到一個比pivot更小的數j-=1nums[i] = nums[j] #將更小的數放入左邊while(i<j and nums[i]<=pivot): #從前往后找,直到找到一個比pivot更大的數i+=1nums[j] = nums[i] #將更大的數放入右邊#循環結束,i與j相等nums[i] = pivot #待比較數據放入最終位置 return i #返回待比較數據最終位置

快速排序

#快速排序 def quicksort(nums, left, right):if left < right:index = partition(nums, left, right)quicksort(nums, left, index-1)quicksort(nums, index+1, right)arr = [1,3,2,2,0] quicksort(arr, 0, len(arr)-1) print(arr)

topk切分

將快速排序改成快速選擇,即我們希望尋找到一個位置,這個位置左邊是k個比這個位置上的數更小的數,右邊是n-k個比該位置上的數大的數,我將它命名為topk_split,找到這個位置后停止迭代,完成了一次劃分。

def topk_split(nums, k, left, right):#尋找到第k個數停止遞歸,使得nums數組中index左邊是前k個小的數,index右邊是后面n-k個大的數if (left<right):index = partition(nums, left, right)if index==k:return elif index < k:topk_split(nums, k, index+1, right)else:topk_split(nums, k, left, index-1)

獲得前k小的數

#獲得前k小的數 def topk_smalls(nums, k):topk_split(nums, k, 0, len(nums)-1)return nums[:k]arr = [1,3,2,3,0,-19] k = 2 print(topk_smalls(arr, k)) print(arr)

獲取第k小的數

#獲得第k小的數 def topk_small(nums, k):topk_split(nums, k, 0, len(nums)-1)return nums[k-1] #右邊是開區間,需要-1arr = [1,3,2,3,0,-19] k = 3 print(topk_small(arr, k)) print(arr)

獲得前k大的數

#獲得前k大的數 def topk_larges(nums, k):#parttion是按從小到大劃分的,如果讓index左邊為前n-k個小的數,則index右邊為前k個大的數topk_split(nums, len(nums)-k, 0, len(nums)-1) #把k換成len(nums)-kreturn nums[len(nums)-k:] arr = [1,3,-2,3,0,-19] k = 3 print(topk_larges(arr, k)) print(arr)

獲得第k大的數

#獲得第k大的數 def topk_large(nums, k):#parttion是按從小到大劃分的,如果讓index左邊為前n-k個小的數,則index右邊為前k個大的數topk_split(nums, len(nums)-k, 0, len(nums)-1) #把k換成len(nums)-kreturn nums[len(nums)-k] arr = [1,3,-2,3,0,-19] k = 2 print(topk_large(arr, k)) print(arr)

只排序前k個小的數

#只排序前k個小的數 #獲得前k小的數O(n),進行快排O(klogk) def topk_sort_left(nums, k):topk_split(nums, k, 0, len(nums)-1) topk = nums[:k]quicksort(topk, 0, len(topk)-1)return topk+nums[k:] #只排序前k個數字arr = [0,0,1,3,4,5,0,7,6,7] k = 4 topk_sort_left(arr, k)

只排序后k個大的數

#只排序后k個大的數 #獲得前n-k小的數O(n),進行快排O(klogk) def topk_sort_right(nums, k):topk_split(nums, len(nums)-k, 0, len(nums)-1) topk = nums[len(nums)-k:]quicksort(topk, 0, len(topk)-1)return nums[:len(nums)-k]+topk #只排序后k個數字arr = [0,0,1,3,4,5,0,-7,6,7] k = 4 print(topk_sort_right(arr, k))

作者:jun-lin-w
鏈接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/solution/ji-yu-kuai-pai-de-suo-you-topkwen-ti-jia-ylsd/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

猜你喜歡:👇🏻
?【Leetcode】幾種簡單的排序算法
?【Leetcode】二分法左側邊界右側邊界模板
?【Leetcode】島嶼問題(數量,周長,面積)

總結

以上是生活随笔為你收集整理的【Leetcode】大神总结的所有TopK问题模板(基于快速排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产a国产片 | 国产在线二区 | 禁网站在线观看免费视频 | 91视频网| 91看毛片| 韩国黄色精品 | 欧美s码亚洲码精品m码 | 动漫av一区| 亚洲欧美在线视频免费 | 精品不卡一区 | 91视频99 | 91天天色 | 无套内谢老熟女 | 成人影视在线看 | 极品女神无套呻吟啪啪 | 成人黄色在线看 | 97超碰网 | 国产又粗又猛又黄又爽视频 | 日韩成人av一区 | 亚洲综合色一区 | 天堂资源在线观看 | 海角官网| av巨作| www.av网站| 老鸭窝一区二区 | 99er在线观看 | 欧美日韩亚洲一区 | 亚洲国产免费av | 精品免费视频一区二区 | 国产三级三级在线观看 | 四虎音影 | 在线二区 | 日本护士做爰视频 | 中文字幕免费高清网站 | 国产激情影院 | 中文字幕日韩精品无码内射 | 少妇影院在线观看 | aa成人 | 极品销魂美女少妇尤物 | 7色av| 关秀媚三级 | 中文字幕在线不卡视频 | 成人在线视频免费 | 一区二区三区高清 | 99精品视频免费在线观看 | 北条麻妃一区二区三区 | 亚洲精品乱码久久久久久蜜桃欧美 | 野花视频免费在线观看 | av操操 | 天堂av亚洲av国产av电影 | 欧美日韩综合一区二区 | 性生活毛片 | 精品免费囯产一区二区三区 | 香蕉视频91 | 国产精品99久久久久久久女警 | 91欧美一区| 久久一卡二卡 | 天天搞夜夜| 另类视频在线观看+1080p | 亚洲人成久久 | 久久久精品免费观看 | 日本精品三区 | 在线国产中文字幕 | 色翁荡息又大又硬又粗又爽 | 日韩精品免费在线 | 一区二区三区免费在线观看 | av综合一区 | 男人和女人插插 | 久青草免费视频 | 国产亚洲一区二区三区 | 日本人妻换人妻毛片 | 91精品国产乱码久久久久 | 久久精品国产99精品国产亚洲性色 | 午夜影院在线看 | 亚洲成色| 黄色成人在线观看 | 日韩资源在线观看 | 丝袜诱惑一区二区 | 亚洲88| 九九热在线视频免费观看 | 久久国产精品影院 | 国产精品视频 | 国产三级三级在线观看 | 久久视频在线观看 | 日本一区二区在线观看视频 | 一区二区在线观看视频 | 免费亚洲精品 | 国产欧美一区二区三区在线 | 少妇大叫太粗太大爽一区二区 | 成年人免费看的视频 | 国产日韩免费视频 | 国产一区二区在线观看免费 | xxx日韩 | 牛牛在线| 国产精品一区二区三区久久久 | 国产精品美女久久久久图片 | 伊人久久狼人 | 成人免费毛片免费 | 日日骑夜夜操 |