LeetCode 215.陣列中的第K個最大元素
阿新 • • 發佈:2020-08-01
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。 示例 1: 輸入: [3,2,1,5,6,4] 和 k = 2 輸出: 5 示例 2: 輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4 輸出: 4 說明: 你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。 class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: def partition2(nums, left, right): random_index = random.randint(left, right) nums[left], nums[random_index] = nums[random_index], nums[left] pivot = nums[left] i = left j = right while i< j: if nums[i]>pivot: i+=1 elif nums[j]<pivot: j-=1 else: if nums[i] == nums[j]: i+=1 else: nums[i], nums[j] = nums[j], nums[i] return i def partition(nums, left, right): random_index = random.randint(left,right) nums[left], nums[random_index] = nums[random_index], nums[left] pivot = nums[left] # 基準點 i = left for j in range(left+1, right+1): if nums[j] > pivot: # 把大於基準點的元素, 交換到左邊 i+=1 nums[i], nums[j] = nums[j], nums[i] nums[left], nums[i] = nums[i], nums[left] return i left = 0 right = len(nums) - 1 while True: index = partition(nums, left, right) if index == k - 1: return nums[k - 1] elif index > k - 1: right = index - 1 else: left = index + 1