码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode] Kth largest element in an array

时间:2015-08-11 20:53:54      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:

这个题目使用快排。

这里涉及如何实现快排的问题。在[1]当中有一个快排的实现例子。在这里我们关注与快排的实现而不是这个问题本身,因为快排的问题解决了,这个问题就解决了

快排的思想是选择一个元素,从两边进行遍历将遇到的第一对不满足序列关系的元素进行交换。

关键是这里如何实现这种兑换

1、可以在同时找到这两个元素的时候进行交换

2、交替进行替换的策略。

比如先将左边位置left空出,从右边进行遍历找第一个小于pivot的元素以及所以right,将right位置的元素放到left处,同时将right位置空出

在从左边找第一个大于pivot的元素,当然现在left位置处的元素是小于pivot的,所以会继续left加一,直至找到一个大于等于pivot的元素或者right=left。

========================================================================================

left=0,right=num.length-1;

pivot = num[left];

while(left<right){

  while(left<right&&num[right]>=pivot) right--;

    num[left]= num[right];

  while(left<right&&num[left]<pivot)     left++;

    num[right]=num[left];

}

num[left]=pivot;

========================================================================================

我们简单分析一下代码的执行边界:

1、进入外层while循环,则开始找第一个小于pivot的元素

(1)如果在left的右侧找到,则填充到left位置处;

(2)如果没有找到,也就是说当前的元素都是大于等于pivot的;则第二个内层while循环当中由于left等于right,所以进行了自我复制,最后跳出while循环,并且在left或者right处写入pivot

(3)如果第二个while循环没有找到,也就是此时left右侧到right之间的所有元素都是小鱼pivot的,那么这是实际上已经找到了pivot插入的位置,就在刚才等待插入的right 处,算法结束。

 

[1] http://www.cnblogs.com/easonliu/p/4523941.html

[Leetcode] Kth largest element in an array

标签:

原文地址:http://www.cnblogs.com/deepblueme/p/4722129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!