classSolution: deffindKthLargest(self, nums: List[int], k: int) -> int: n = len(nums) # 寻找第k大,等价于寻找升序后下标为 n-k 的数 target_index = n - k left, right = 0, n - 1 whileTrue: # 执行切分操作,确定一个元素的固定位置 i i = self.partition(nums, left, right) if i == target_index: return nums[i] if i > target_index: # 目标在左侧 right = i - 1 else: # 目标在右侧 left = i + 1
i, j = left + 1, right whileTrue: # 双指针扫描 while i <= j and nums[i] < pivot: i += 1 while i <= j and nums[j] > pivot: j -= 1 if i >= j: break # 交换不符合单调性的元素 nums[i], nums[j] = nums[j], nums[i] i += 1 j -= 1 # 将 pivot 换回其最终在该区间内的绝对位置 nums[left], nums[j] = nums[j], nums[left] return j
classSolution: deffindKthLargest(self, nums: List[int], k: int) -> int: n = len(nums) # 寻找第k大,等价于寻找升序后下标为 n-k 的数 target_index = n - k left, right = 0, n - 1
whileTrue: # 执行切分操作,确定一个元素的固定位置 i i = self.partition(nums, left, right) if i == target_index: return nums[i] if i > target_index: # 目标在左侧 right = i - 1 else: # 目标在右侧 left = i + 1
defmain(): data = sys.stdin.read().strip().split() k = int(data[-1]) nums = list(map(int, data[:-1]))
sol = Solution() result = sol.findKthLargest(nums, k) print(result)