Lintcode5 Kth Largest Element solution 题解

jane_silva 2017-03-23 09:33:30
【题目描述】

Find K-th largest element in an array.

Notice:You can swap elements in the array

在数组中找到第k大的元素

注意:你可以交换数组中的元素的位置

【题目链接】

http://www.lintcode.com/en/problem/kth-largest-element/

【题目解析】

sort的方法:一开始看到这道题肯定觉得很简单,只要sort一下,然后return特定index的value就可以了,但是sort的time complexity至少是O(nlogn)

Quick Select:这个是由quick sort演化而来,用到了partition的部分,每次选一个pivot,小于它的放左边,大于它的放右边。

用Quick Sort的divide-and-conquer法,或者用Priority Queue (Max Heap) 数据结构,注意Java和Python都是最小堆,需要转换一下。

【题目答案】

http://www.jiuzhang.com/solutions/kth-largest-element/
...全文
770 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2017-03-24
  • 打赏
  • 举报
回复
利用 List 控件的奇葩解法:设置其中 List2 的 Sorted = True 下面的例子是从 100 个随机数中找出第 5 大的数字。

Private Const K = 5
Private Const N = 100

Private Sub Command1_Click()
Dim i As Integer

'Prerare data
List1.Clear
Randomize
For i = 1 To N
    List1.AddItem Rnd * 1000
Next i

'Find Kth Largest Number
List2.Clear
For i = 0 To N - 1
If List2.ListCount < K Then
    List2.AddItem List1.List(i)
Else
    If List1.List(i) > List2.List(0) Then
        List2.RemoveItem 0
        List2.AddItem List1.List(i)
    End If
End If
Next i
End Sub
List2.List(0) 就是问题的解。

741

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧