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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关于leetcode第K个最大元素的几种解法

發布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于leetcode第K个最大元素的几种解法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  對于這一題我使用了最大堆,快速排序,歸并排序幾種解法來做這一題,速度最快的是歸并排序

使用定值的最小堆每次更新數組最后剩下前k個最大元素,而且堆頂就是我們要的第K個元素。

堆排序:

import heapq class Solution(object):def findKthLargest(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""self.min_heap = []self.capacity = kself.nums = numsreturn self.get_k()def push(self, val):if len(self.min_heap) >= self.capacity:if self.min_heap[0] < val:heapq.heapreplace(self.min_heap, val)else:heapq.heappush(self.min_heap, val)def get_k(self):for val in self.nums:self.push(val)return self.min_heap[0]

?

快速排序:

class Solution(object):def findKthLargest(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""return nums[-k]def fast_sort(self, nums):if len(nums)<2:return numselse:pivote = nums[0]l = [i for i in nums[1:] if i <=pivote]r = [i for i in nums[1:] if i > pivote]return self.fast_sort(l) + [pivote] + self.fast_sort(r)

時間是5052ms慢的嚇人?

歸并排序:

class Solution(object):def findKthLargest(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""return self.merge_sort(nums)[-k]def merge_sort(self, nums):if len(nums) < 2:return numselse:mid = len(nums) // 2return self.sort_nums(self.merge_sort(nums[:mid]), self.merge_sort(nums[mid:]))def sort_nums(self, left, right):i, j = 0, 0s = []l_len, r_len = len(left), len(right)while i < l_len and j < r_len:if left[i] < right[j]:s.append(left[i])i += 1else:s.append(right[j])j += 1if i < l_len:s += left[i:]else:s += right[j:]return s

這個也是我自己實現的歸并排序時間是 88ms

最后用Python自帶的排序來做

class Solution(object):def findKthLargest(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""nums.sort()return nums[-k]

時間是28ms聽說Python排序底層也是用的歸并排序只不過使用C語言實現的所以快很多

?

轉載于:https://www.cnblogs.com/python-zkp/p/10506724.html

總結

以上是生活随笔為你收集整理的关于leetcode第K个最大元素的几种解法的全部內容,希望文章能夠幫你解決所遇到的問題。

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