关于leetcode第K个最大元素的几种解法
生活随笔
收集整理的這篇文章主要介紹了
关于leetcode第K个最大元素的几种解法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
對(duì)于這一題我使用了最大堆,快速排序,歸并排序幾種解法來(lái)做這一題,速度最快的是歸并排序
使用定值的最小堆每次更新數(shù)組最后剩下前k個(gè)最大元素,而且堆頂就是我們要的第K個(gè)元素。
堆排序:
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)時(shí)間是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這個(gè)也是我自己實(shí)現(xiàn)的歸并排序時(shí)間是 88ms
最后用Python自帶的排序來(lái)做
class Solution(object):def findKthLargest(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""nums.sort()return nums[-k]時(shí)間是28ms聽(tīng)說(shuō)Python排序底層也是用的歸并排序只不過(guò)使用C語(yǔ)言實(shí)現(xiàn)的所以快很多
?
轉(zhuǎn)載于:https://www.cnblogs.com/python-zkp/p/10506724.html
總結(jié)
以上是生活随笔為你收集整理的关于leetcode第K个最大元素的几种解法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软件工程第一周开课博客
- 下一篇: 洛谷P4513 小白逛公园