【Leetcode-215】
一、题目:数组中的第k大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
二、代码:
def findKthLargest(self, nums: List[int], k: int) -> int: def quick_sort(arr, l, r, k): # if l >= r: # return item = arr[l] i, j = l, r while i < j: while arr[j] <= item and i < j: j -= 1 if i < j: arr[i], arr[j] = arr[j], arr[i] while arr[i] >= item and i < j: i += 1 if i < j: arr[i], arr[j] = arr[j], arr[i] if i == k-1: return arr[i] elif i < k-1: return quick_sort(arr, i+1, r, k) else: return quick_sort(arr, l, i-1, k) n = len(nums) res = quick_sort(nums, 0, n - 1, k) return res
【Leetcode-347】
一、题目:第k个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
二、代码:
def topKFrequent(self, nums: List[int], k: int) -> List[int]: """ 方法1:利用最小堆 方法2:利用快排思想 from collections import Counter count = Counter(nums) heap = [] for num, cnt in count.items(): if len(heap) < k: heapq.heappush(heap, (cnt, num)) else: top = heap[0] # 堆中最少的次数 if top[0] < cnt: heapq.heapreplace(heap, (cnt, num)) res = [t[1] for t in heap] return res """ def quick_sort(arr, l, r, k): # if l >= r: # return item = arr[l][1] i, j = l, r while i < j: while arr[j][1] <= item and i < j: j -= 1 if i < j: arr[i], arr[j] = arr[j], arr[i] while arr[i][1] >= item and i < j: i += 1 if i < j: arr[i], arr[j] = arr[j], arr[i] if i == k-1: return arr[:k] elif i < k-1: return quick_sort(arr, i+1, r, k) else: return quick_sort(arr, l, i-1, k) from collections import Counter count = list(Counter(nums).items()) n = len(count) res = quick_sort(count, 0, n - 1, k) return [t[0] for t in res]