这个题目的一种思路是利用快排思想来解决,可以达到O(nlogn)的时间效率。
详细代码如下:
/*
* 在一列数中寻找第k大的数,使用快排思想,一趟快排后会返回一个基准点的位置,如果该位置loc正好处于
* 要求的第k个数的位置,则该位置的数即为所求;如果loc>k,说明要求的第k大的数,在左边子数组中,如果loc<k,
* 则要求的数为右边子数组的第k-loc个位置的数
*/
public class Findnth {
public static void main(String args[]){
int array[] = {5, 6, 7, 9, 8, 4, 3, 2, 1, 10, 12, 11, 13, 14, 15, 16, 17, 19, 18, 20} ;
int re=select(array,0,array.length-1,15);
System.out.println("第---小的数是:"+re);
}
public static int select(int a[],int left,int right,int k){//求第k小的数
if(left==right){
return a[left];
}
int loc=partition(a,left,right);//返回一趟快排后某个基准点的位置
int kth=loc-left+1;//该基准数在当前的子数组中是第几小的数
if(k==kth){//如果该趟排序后返回的基准位置所处的位置正好是这个子数组的第k小的数
return a[loc];//返回处于该位置的值就是要求的第k小的数
}else if(k<kth){
return select(a,left,loc-1,k);//求左边子数组中的第k小的数
}else{
return select(a,loc+1,right,k-kth);//求右边子数组中的第k-kth小的数
}
}
public static int partition(int a[],int left,int right){
//一趟快排,返回以a[left]为基准点的位置
int temp=a[left];
while(left<right){
while(left<right&&a[right]>=temp){
right--;
}
a[left]=a[right];
while(left<right && a[left]<=temp){
left++;
}
a[right]=a[left];
}
a[left]=temp;
return left;
}
}
分享到:
相关推荐
本篇文章将详细解析一个具体的排列问题:“从1到X这X个数字中选出N个,排成一列,相邻两数不能相同,求所有可能的排法”。我们通过Pascal语言来实现这一功能,并深入探讨其背后的逻辑和技术要点。 #### 问题描述 ...
C语言程序设计-求一个四位数的各位数字的立方和.c
2、输入n和k(n》=k)求n个数字的(n,k)排列 如n=3,k=2 输入的三个数位1 2 3 则输出 12 13 21 23 31 32 3、输入n个数(有重复),求n个数字的全排列 如:n=3 全排列的数字为1 1 2 则输出 112 121 211 4、输入...
描述中同样提到“K210版本数字识别-kmodel模板.zip”,这可能是一个包含预训练模型和相关代码的资源包,旨在帮助用户在K210平台上实现数字的识别功能。kmodel是 Kendryte SDK 的一部分,它用于存储经过训练的神经...
例如,卡方自动交互列检测(CHAID)决策树就是一种常用的数据分割式决策树模型,它可以在数字营销中用于市场细分,帮助营销人员确定哪些因素对于目标客户的响应有最大的影响。 此外,帕累托定律(80/20法则)也常被...
根据题目中的描述与提供的代码内容,本篇文章将详细介绍如何利用Java编程解决一个具体的组合问题:即使用数字1、2、3、4可以组成多少个不同的、无重复数字的三位数,并列出所有可能的组合。 ### 一、问题背景 题目...
在这种情况下,每个CSV文件可能包含多列,其中一列代表图像的像素值,另一列可能是对应的标签,即每个手写数字的正确识别结果。 对于数字识别,常用的方法包括支持向量机(SVM)、神经网络,尤其是卷积神经网络...
根据提供的信息,我们可以推断出这是一本名为《数字逻辑与数字系统习题答案(第三版)》的书籍,由电子工业出版社出版。该书主要针对计算机专业学生提供数字逻辑课程相关的习题解答,帮助他们更好地理解和掌握数字...
7. J-K触发器:J-K触发器是另一种常见的时序逻辑器件,其在不同输入条件下有不同的工作状态,如J=K=0时为保持状态,J=0、K=1时置“0”,K=0、J=1时置“1”,J=K=1时触发器翻转。 8. 扭环型计数器:用3个触发器可以...
- **数字识别的意义**:数字识别作为光学字符识别(OCR)的一个重要分支,在多种应用场景中具有重要价值,比如脱机自动记录、车牌号码识别、身份证号码识别、支票号码识别以及邮政编码识别等。 - **传统OCR的局限性**...
它遍历整个数组,检查每个位置上的数字是否与其应有的位置相匹配(例如,1应该在第一个位置,2在第二个位置,以此类推),并且空位(0)是否位于数组的右下角。如果所有条件都满足,则返回1表示拼图完成;否则,返回...
"数字设计原理与实践第7章作业答案" 本资源为数字设计原理与实践第7章作业答案,包含了数字设计原理与实践的重要知识点,涵盖了数字电路的基本概念、数字逻辑电路的设计方法、触发器的原理与应用、状态机的设计与...
《数字电子技术基础》第四版课后习题答案主要涵盖了数字电路中的触发器相关知识,特别是RS、D、JK和T触发器的工作原理及其应用。本章内容涉及到以下几个关键知识点: 1. **触发器的基本概念**:触发器是数字电路中...
在计算机科学和编程领域,"数组的逆序数"是一个重要的概念,特别是在算法分析和排序算法中。逆序数(Inversion Count)是指在数组或序列中,如果一个大于其后面的元素,则这样的对称为逆序对。逆序数就是数组中逆序...
2. **插入辅助列**:在需要排序的列(例如J列)旁边插入一列。在新的列(J列)中,从第四行开始,输入公式`=H4&I4`,其中H4和I4是原始数据所在的单元格。这个公式用于合并H列和I列的内容,以便后续处理。 3. **复制...
本部分将详细解读数字逻辑电路相关的知识点,涵盖二进制数的表示、真值表的构建、逻辑函数的化简以及Karnaugh图(K图)化简法的应用。 首先,二进制数包括原码、反码和补码,用于表示正数和负数。原码是最直观的...
在实验中,我们使用 C 语言实现了 DSS 数字签名算法,并使用 SHA-1 生成散列的程序对信息进行签名和验证。实验结果表明,DSS 数字签名算法可以确保信息的完整性和身份验证。 实验环境: * 运行 Windows 或 Linux ...
3. 每一列的三个数字之和为15。 4. 主对角线(左上到右下)的三个数字之和为15。 5. 副对角线(右上到左下)的三个数字之和为15。 ### 二、解决方案分析 #### 1. 数据结构选择 为了表示3×3的棋盘,我们可以使用一...
每个图像都附带一个标签,表示图像中的数字是0到9中的哪一个。MNIST数据集的组织结构使得它成为新手学习深度学习的绝佳选择,因为它相对较小,处理起来比较快速,但又足够复杂,可以展示出深度学习模型的强大能力。 ...