其实有点震惊出这个题,典型的quick select问题,我贡献一个我的代码供参考吧 def findKthLargest(nums, start, end, k): if start >= end:   return nums[end]   left, right = start, end pivot = nums[left + (right - left) / 2] while left <= right: while left <= right and nums[left] > pivot: left += 1 while left <= right and nums[right] < pivot: right -= 1 if left <= right: nums[left], nums[right] = nums[right], nums[left] left += 1 right -= 1 if start + k - 1 <= right: return findKthLargest(nums, start, right, k) if start + k - 1 >= left: return findKthLargest(nums, left, end, k - (left - start)) return nums[right + 1] 其实就是典型的快速排序变体而已,while循环中关于pivot的那两个大小于号一改上面这个函数就变成快排了,个人觉得这个很好记忆而且是单独找这种第k大第k小之类问题的最优解了
点赞 评论

相关推荐

点赞 评论 收藏
分享
牛客网
牛客企业服务