quick select 及其相关问题

这种算法的均摊复杂度是o(n)

T(n) = T(n/2) + o(n)

    = T(n/4) + 0(n/2)+o(n)

   =...

   = 0(n)

Kth largest element 问题

 1 public class Solution {
 2     public int findKthLargest(int[] nums, int k) {
 3         if (nums == null || nums.length == 0) {
 4             return -1;
 5         }
 6         return helper(nums, nums.length - k + 1, 0, nums.length - 1);  //length - k + 1 convert the kth large to k‘th small one
 7     }
 8     private int helper(int[] nums, int k, int start, int end) {
 9         if (start == end) {
10             return nums[start];
11         }
12         int position = partition(nums, start, end);
13         if (position + 1 == k) {
14             return nums[position];
15         }else if (position + 1 > k) {
16             return helper(nums, k, start, position - 1); //这个地方为什么是return 下一层递归的结果,因为需要的结果在下层/下下层递归中得到,          把这个值返回来交给最上面的一层
17         } else {
18             return helper(nums, k, position + 1, end);
19         }
20     }
21
22     private int partition(int[] nums, int left, int right) {
23         int pivot = nums[left];
24         while (left < right) {
25              while (left < right && nums[right] >= pivot) {
26                 right--;
27             }
28             nums[left] = nums[right];
29             while (left < right && nums[left] <= pivot) {
30                 left++;
31             }
32             nums[right] = nums[left];
33         }
34         nums[left] = pivot;
35         return left;
36     }
37 }
时间: 2024-10-12 15:55:12

quick select 及其相关问题的相关文章

大连廿四2016暑假集训day1-T3(quick select&amp;linear select)

3 kth3.1 Description给定 n 个不超过 10^9 的正整数,请线性时间选择算法 (linear select)求其中的第 k 大值.3.2 Input第一行两个整数 n,k. 第二行 n 个整数,表示题目中的那 n 个正整数.3.3 Output一行,表示答案.3.4 Sample Input10 3 2 4 7 3 5 6 9 6 1 83.5 Sample Output73.6 Constraints一共 10 个测试点,每个测试点 10 分,只有当你的答案与标准答案完全

飘逸的python - 大数据TopK问题的quick select解法

TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词. 方法一: 先排序,然后截取前k个数. 时间复杂度:O(n*logn)+O(k)=O(n*logn). 方法二: 最小堆. 维护容量为k的最小堆.根据最小堆性质,堆顶一定是最小的,如果小于堆顶,则直接pass,如果大于堆顶,则替换掉堆顶,并heapify整理堆,其中heapify的时间复杂度是logk. 时间复杂度:O(k+(n-k)*logk)=O(n*logk) 方法三: 本文的主角.quic

快速排序系列笔记 quick select

基础1: partition Partition Array Given an array nums of integers and an int k, partition the array (i.e move the elements in "nums") such that: All elements < k are moved to the left All elements >= k are moved to the right Return the partit

Jquery获取select option动态添加自定义属性值失效

Jquery获取select option动态添加自定义属性值失效 2014/12/31 11:49:19 中国学网转载 编辑:李强 http://www.xue163.com/588880/39096/390963333.html 为了帮助网友解决“Jquery获取select optio”相关的问题,中国学网通过互联网对“Jquery获取select optio”相关的解决方案进行了整理,用户详细问题包括:jqueryselectie9  function GetFenceItemData(

7 mysql常用语句汇总

mysqld 常规MySQL服务器mysqld-opt 优化mysql服务器,提供一些功能可以挖掘更好的功能mysqld-max 与mysqld一样,但可以支持更新,更具实验性质的功能(更不稳定) ++安装mysql参见自带的INSTALL-SOURCE文件$ ./configure ?prefix=/app/mysql-5.0.51a ?with-charset=utf8 ?with-extra-charsets=utf8,gb2312,utf8 ++启动/关闭mysql$ path/mysq

PowerBuilder创建登录实例—你的心我终于懂了(二)

三.登录例子后期实践 1. 创建应用对象 (1)选择file\new,或者快捷键Ctrl+N,新建Workspace工作空间,如下图,点击OK,然后命名为testSpace. (2)同以上方法一样, 新建Traget\Application应用程序库,点击Ok 得到下图后,填写库名testapplication和相应的路径,然后点击Finish完成. 2. 创建第一个窗口(登录窗口) (1)选择file\new,或者快捷键Ctrl+N,新建PB Object\Window窗体,然后点击ok.即创

如何获得DB2企业应用程序的最佳性能

简介 当要保证用 IBM DB2(DB2认证 DB2培训 )® Universal Database"(DB2 UDB)和 Borland® 工具(如 Delphi".C++Builder" 或 Kylix")构建的企业应用程序拥有最优性能时,程序员可以利用 DB2 优化器的能力来处理即使是“难以处理的”SQL 语句并给出有效的存取路径.尽管如此,拙劣编码的 SQL 和应用程序代码仍可能给您带来性能问题,通过学习几条基本准则可以轻易地避免这些问题.我将向您演示 DB

mysql全文索引____ft_min_word_len

对于刚使用mysql全文索引搜索的童鞋,第一个疑惑可能就是,为什么我搜索xx结果不显示呢?明明我数据里面有.这个问题有很多种原因,其中最常见的就是ft_min_word_len(最小搜索长度)导致的. 准备测试数据如下 CREATE TABLE mysql_fulltext (id BIGINT UNSIGNED AUTO_INCREMENT, text_info VARCHAR(1000) NOT NULL, PRIMARY KEY(id), FULLTEXT(text_info) )ENGI

十种常见的排序算法,面试算法必考

1.冒泡排序 已知一组无序数据a[1].a[2].……a[n],需将其按升序排列.首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变.再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变.再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值.这样处理一轮后,a[n]的值一定是这组数据中最大的.再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的.再对a[1]~a[n-2]以相同方