文章目录

  • 前言
  • 一、题目描述
  • 二、思路
  • 三、代码实现

前言

1.(Math.random()(x-y))+y // Math.random()(x-y+1)+y; 随机数x~y
2.递归
3.三目运算法则
4.快排模板

void quick_sort(int q[], int l, int r)
{if (l >= r) return;int i = l - 1, j = r + 1, x = q[l + r >> 1];while (i < j){do i ++ ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i], q[j]);}quick_sort(q, l, j), quick_sort(q, j + 1, r);
}作者:yxc
链接:https://www.acwing.com/blog/content/277/
来源:AcWing

一、题目描述

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

提示:
1 <= k <= nums.length <= 104
-104 <= nums[i] <= 104

二、思路

目标寻找第k大的数,所以可以利用快排(快排基础就不细说了,可以自己去了解一下),这些数不一定排好,标准数左边是大数,右边是小数,然后再在左边大数中寻找目标数,如果此时标准数刚刚好是所求下标(在数组中是k-1),则即为所求值。

三、代码实现

代码如下(示例):

class Solution {public int findKthLargest(int[] nums, int k) {return QuickSort(nums,0,nums.length-1,k);}public int QuickSort(int nums[],int l,int r,int k){int index = randomParam(nums, l, r);if(index == k-1){return nums[index];}else{return index>k-1?  QuickSort(nums,l,index-1,k): QuickSort(nums,index+1,r,k); }}public int randomParam(int nums[],int l,int r){int b = (int)(Math.random()*(r-l+1)+l);swap(nums,b,r);return quick_sort(nums,l,r);}public int quick_sort(int nums[],int l,int r){ // 可以记住这个模板,把基准数默认放到最右边,然后开始左右指针移动比较//这里没有用那个do_while模板,那个容易超过时间限制int c = r;int index = nums[r];while(l<r){while(l<r && nums[l] > index) l++;while(l<r && nums[r] <= index) r--; if(l<r) swap(nums,l,r);}swap(nums,l,c);return l;}public void swap(int [] nums,int l, int r){int temp = nums[l];nums[l] = nums[r];nums[r] = temp;}
}

算法_第k大的数_快排(leetcode215,java)相关推荐

  1. 寻找第K大的数(快排思想)

    使用快排思想找第K大的数,算法复杂度O(n). 1.以数组a的第0位a[0]为参考基准base,将数组划分为两个部分: 如果找第K大的数,则将大于base的数往前挪,将小于base的数往后挪.如果找第 ...

  2. 算法-寻找第K大的数的方法总结

    转载:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 解法3: void findKthBigger(vector<i ...

  3. python查找第k大的数_寻找数组中第K大的数

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) ...

  4. 求n个数中第k大的数_互联网高频面试题目:「回溯算法」求组合总和

    我将算法学习相关的资料已经整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面还有leetcode刷题攻略.各个类型经典题 ...

  5. 算法题目——第K大的数

    题目链接:剑指offer.76 思路: 使用 priority_queue 构建优先队列,这里注意要构建大顶堆,使less: pop() 弹出前 K-1 个数值 top() 即可 #include&l ...

  6. 无序数组中找第K大的数

    类快排算法 leetcode215 由于只要求找出第k大的数,没必要将数组中所有值都排序. 典型解法:快速排序分组. 在数组中找到第k大的元素 取基准元素,将元素分为两个集合,一个集合元素比基准小,另 ...

  7. java查找第k大的数字_[经典算法题]寻找数组中第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

  8. java查找第k大的数字_查找数组中第k大的数

    问题:  查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...

  9. c++求区间第k大数_寻找第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

最新文章

  1. 好评如潮的C#实战图书
  2. 打造全能的文本编辑器序列文章
  3. java安装好了打不开机_这都不犯规?王骁辉尺度把握得真好 难怪0+0+0能打20分钟...
  4. 天天用 Spring,bean 实例化原理你懂吗?
  5. python谷歌浏览器驱动安装失败_阿里云centos7.2下安装chrome浏览器+webdriver+selenium及常见设置-傻瓜教程...
  6. [云炬创业基础笔记]第二章创业者测试13
  7. 3.1.11 OS之段页式存储管理(段表、页表、地址转换、)
  8. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...
  9. SQL Server JSON:性能手册
  10. matlab 局部特征检测与提取(问题与特征)
  11. HCIE Security 防火墙反病毒 备考笔记(幕布)
  12. RabbitMQ实战:理解消息通信
  13. Android WebView 选择图片并上传(调用相机拍照/相册/选择文件)
  14. Cisco Packet Tracer 超网(CIDR)设置实验
  15. tidymodels绘制校准曲线
  16. java如何开发webservice接口
  17. 微软杀毒软件 MSE (Microsoft Security Essentials) 官方下载地址
  18. 浅谈移动LSTP的建设
  19. R语言实战笔记--第十四章 主成分和因子分析
  20. 易语言从html中获取验证码,易语言过腾讯滑块验证码模块源码和调用例程

热门文章

  1. 局部变量和静态局部变量
  2. 一复习就要冬眠?备考防困秘籍拿上!
  3. androd报错Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object refere
  4. 说说kill和kill -9
  5. PMP第八章重要知识点
  6. 金钱豹吃回本大攻略。
  7. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量
  8. CatBoost安装
  9. 宠物消费升级 “黑科技”带来了哪些改变?
  10. mysql tpch_GitHub - staticor/tpch-mysql