NC88 寻找第K大
时间:2021-10-11
本文章向大家介绍NC88 寻找第K大,主要包括NC88 寻找第K大使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package NC;
/**
* NC88 寻找第K大
* 有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。
*
* 给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。
* 要求:时间复杂度 O(nlogn),空间复杂度 O(1)
*
* @author Tang
* @date 2021/10/11
*/
public class FindKth {
/**
* 写个快排
* 快排原理—每一组交换为了找到数组最中间的数字
*
* @param a
* @param n
* @param K
* @return
*/
public int findKth(int[] a, int n, int K) {
// write code here
quickSort(a, 0, n-1);
return a[n - K];
}
/**
* 写个快排
* 快排原理: 将数组第一个值当作base,给base找到数组中该有的位置
* 比base小的都放在左边,比base大的都放在右边
* @param a
* @param start
* @param end
*/
private void quickSort(int[] a, int start, int end) {
if(start >= end) {
return;
}
int i = start;
int j = end;
//给base找到合适位置
int base = a[start];
while(i < j) {
while (i < j && base <= a[j]) {
j--;
}
if(i < j && base > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
}
while (i < j && base >= a[i]) {
i++;
}
while (i < j && base < a[i]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
j--;
}
}
a[i] = base;
quickSort(a, start, i-1);
quickSort(a, i+1, end);
}
public static void main(String[] args) {
int[] num = {10,10,9,9,8,7,5,6,4,3,4,2};
int kth = new FindKth().findKth(num, 12, 3);
System.out.println(kth);
}
}
原文地址:https://www.cnblogs.com/ttaall/p/15393967.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3分钟短文 | Laravel 表单验证数组的数据
- 3分钟短文:Laravel 编程中优雅地添加定义常量
- 极客算法训练笔记(四),栈和队列,从实际应用看数据结构
- 微博爬虫出错居然还和网络运营商有关
- 8.深入k8s:资源控制Qos和eviction及其源码分析
- 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
- CNN不用乘法? AdderNet和DeepShift论文理解
- 动手构建地铁关系网,实现最短路径查询
- Java并发编程(08):Executor线程池框架
- 用Scipy求解单个正态总体的置信区间
- 架构设计 | 基于电商交易流程,图解TCC事务分段提交
- 用Gaussian做CASSCF计算
- 用Gaussian 16计算振动分辨的紫外-可见吸收光谱
- graylog日志分析系统上手教程
- 使用Seq搭建免费的日志服务