215. Kth Largest Element in an Array
来源:互联网 发布:短信可爱铃声软件 编辑:程序博客网 时间:2024/05/20 04:32
题意:Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
思路:这题的方法有很多,特别是O(n^2)的方法,只要是排序的方法都可以解,求出排序的结果,再求-k位索引的值就可以了,但是如果要用O(n)的方法,可能就需要借助快排了,快排每次能将一个放在正确的位置上,快排的具体算法步骤可以参考这个视频舞动的快排 ,很形象的表现了快排的过程,先放一个快排的代码:
class Solution: # @param {integer} s # @param {integer[]} nums # @return {integer} def quicksort(self, nums, l, r): if l >= r: return pos = self.partition(nums, l, r) self.quicksort(nums, l, pos-1) self.quicksort(nums, pos+1, r) # choose the right-most element as pivot def partition(self, nums, l, r): low = l while l < r: if nums[l] < nums[r]: nums[l], nums[low] = nums[low], nums[l] low += 1 l += 1 nums[low], nums[r] = nums[r], nums[low] return lowif __name__ == "__main__": a = [3,4,2,4,5,6,8,3,56,7,8,9,4,3,2] Solution().quicksort(a,0,len(a)-1) print a
了解快排之后,就可以来做题了,具体思路是先找到数组末端的数,将它放到正确的位置pos,再到剩下的部分去搜索第k-pos-1或者第k大的结果即可。
def findKthLargest(self, nums, k): # convert the kth largest to smallest return self.findKthSmallest(nums, len(nums)+1-k)def findKthSmallest(self, nums, k): if nums: pos = self.partition(nums, 0, len(nums)-1) if k > pos+1: return self.findKthSmallest(nums[pos+1:], k-pos-1) elif k < pos+1: return self.findKthSmallest(nums[:pos], k) else: return nums[pos]# choose the right-most element as pivot def partition(self, nums, l, r): low = l while l < r: if nums[l] < nums[r]: nums[l], nums[low] = nums[low], nums[l] low += 1 l += 1 nums[low], nums[r] = nums[r], nums[low] return low
0 0
- 215.Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 快速理解JavaScript中apply()和call()的用法和用途
- XUtils之注解机制详解
- 文件描述符和文件指针的相互转换
- Caffe学习系列(13):数据可视化环境(python接口)配置
- asp.net服务器控件button先执行js再执行后台的方法
- 215. Kth Largest Element in an Array
- CentOS7安装tomcat8
- angular2 脏检查总述--zone.js 原理
- Dubbo架构设计详解
- 解决 SqlServer执行脚本,文件过大,内存溢出问题
- 458PoorPigs
- 【java】 Java中Arrays类的两个方法:deepEquals和equals
- 【Struts2】Struts2要点总结
- tomcat控制台日志打印中文乱码问题解决