无序数组找出其中的第K大的数

不排序,两种方法找到无序数组的最大K个数 虽然不排序,这这两种方法都源于经典的排序算法的扩展   方式一,快速排序的扩展 /************************************************************************/ /*找到无序数组中最大的k个数 */ /********************************************************** 阅读详情
  • python
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 23 10:19:24 2017

@author: MLee
"""

import random

def partition(arr, low, high):
    pivot = arr[low]
    while low < high:
        while low < high and arr[high] <= pivot:
            high -= 1
        arr[low] = arr[high]
        while low < high and arr[low] >= pivot:
            low += 1
        arr[high] = arr[low]
    arr[low] = pivot
    return low

def get_Kth_max(arr, low, high, k):
    pos = partition(arr, low, high)
    if (pos+1) == k:
        return arr[k-1]
    elif (pos+1) < k: # k始终为数组中的绝对位置
        return get_Kth_max(arr, pos+1, high, k)
    else:
        return get_Kth_max(arr, low, pos-1, k)

if __name__ == "__main__":
    k = int(input("(total: 10)> "))
    sample = random.choices(range(-50, 50), k=10)
    print(sample)
    print(sorted(sample, reverse=True))
    print(get_Kth_max(sample, 0, len(sample)-1, k))

补充:

# -*- coding: utf-8 -*-
"""
Created on Sat Sep 23 10:45:21 2017

@author: MLee
"""

def get_Kth_max(arr, k):
    arr = sorted(arr, reverse=True)
    count = 1
    index = 0
    for i in range(1, len(arr)):
        if count == k:
            break
        if arr[i] != arr[index]:
            index = i
            count += 1
    return arr[index]

if __name__ == "__main__":
    k = int(input("> "))
    arr = list(map(int, input("> ").split()))
    print(sorted(arr, reverse=True))
    print(get_Kth_max(arr, k))
  • java
package edu.ccnu;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Kth {

    public static int partition(int[] arr, int low, int high){
        int pivot = arr[low];
        while(low < high){
            while(low < high && arr[high] <= pivot){
                high--;
            }
            arr[low] = arr[high];
            while(low < high && arr[low] >= pivot){
                low++;
            }
            arr[high] = arr[low];
        }
        arr[low] = pivot;
        return low;
    }

    public static int getKthMax(int[] arr, int low, int high, int k){
        int pos = partition(arr, low, high);
        if((pos+1) == k){
            return arr[k-1];
        }else if((pos+1) < k){
            return getKthMax(arr, pos+1, high, k);
        }else{
            return getKthMax(arr, low, pos-1, k);
        }
    }

    public static void main(String[] args) {
        Random rand = new Random(System.currentTimeMillis());
        int[] sample = new int[8];
//      int k = rand.nextInt(sample.length);
        Scanner sc = new Scanner(System.in);
        System.out.print("> ");
        int k = sc.nextInt();
        for(int i = 0; i < sample.length; i++){
            sample[i] = rand.nextInt(100);
        }
        System.out.println(Arrays.toString(sample));
        System.out.println(getKthMax(sample, 0, sample.length-1, k));
        Arrays.sort(sample);
        System.out.println(Arrays.toString(sample));
    }
}
[ByteDance] 无序数组中找出所有满足要求的K 题目描述 求数组中比左边元素都大同时比右边元素都小的元素,返回这些元素的索引。要求时间复杂度 O(N)。 输入:[2, 3, 1, 8, 9, 20, 12] 输出:3, 4 解释:数组中 8, 9 满足题目要求,他们的索引分别是 3、4 方法一: 最简单的思路是遍历数组,对于每个元素分别往前、往后遍历一下,看看是否它是否满足条件。 for(int i = 0; i < n; i ++) { for(int j = 0; j < i; j +... 阅读详情

相关推荐

地心地固坐标系与北天东坐标系的转换

经过这一步旋转,x3轴和y3轴就处在过O3点的经度线所在的平面了,而且z3轴指向了东。将图3的坐标系旋转成图2的样子。这里需要多次旋转,每次以某个轴为对称轴进行旋转,对应的坐标变换参考。的原点在地心,Z轴指向北极点,X轴指向本初子午线与赤道的交点,Y轴指向符合右手定则,如下图所示。下面实现地心地固坐标系到北天东坐标系的转换,问题描述为:设一点。以y1轴为对称轴,顺时针旋转90°,得到图4的样子。,X轴指向北,Y轴指向天,Z轴指向东,如下图所示。因此,北天东坐标下的坐标为。点在图3坐标系下的坐标。

csdnqixiaoxin的博客 3555

【数据结构与算法】寻找无序数组中第K大的数

【数据结构与算法】寻找无序数组中第K大的数

u011250186的博客 1671

如何在huggingface上申请下载使用llama2/3模型

huggingface-cli download --resume-download 模型名称 --local-dir 存放模型的位置 --local-dir-use-symlinks False --resume-download --token token序列号xxxxxxx。登录huggingface,在模型详情页面上,找到这个表单,填写内容,提交申请。需要使用梯子,country填写梯子的位置吧(比如美国)等待一小时左右,会有邮件通知。

a61022706的博客 1万+

无序数组中找第K大的数

类快排算法 leetcode215 由于只要求找出第k大的数,没必要将数组中所有值都排序。 典型解法:快速排序分组。 在数组中找到第k大的元素 取基准元素,将元素分为两个集合,一个集合元素比基准小,另一个比基准大 ,三种情况。 1.比基准大的元素数目标志位m正好为k-1,基准就是目的元素。 2.比基准大的元素标志位m小于k, 那么就在比基准小的集合里面找第(k-m)大的元素 3.若是比基准大的元素为m大于k,那就继续在该集合里面找第k大的元素。 快排中的partition算法,返回key在数组中的

juluwangriyue的博客 2961

01 AUTOSAR CP标准文档阅读指南

01 AUTOSAR CP标准文档阅读指南

汽车软件工程师 | 好奇博主 | 处女座 1134

PyTorch复现EEG-TCNet踩坑记:从BCI IV2a数据到TCN块缺失的完整解决方案

本文详细解析了使用PyTorch复现EEG-TCNet模型的全过程,重点解决了BCI IV2a数据集预处理和TCN模块缺失的技术难题。通过标准化数据流程、跨受试者验证策略以及三种因果卷积实现方案,为运动想象分类任务提供完整解决方案,帮助研究者高效实现模型复现与优化。

weixin_30699955的博客 319

【算法】在N个乱序数字中查找第K大的数字

目录 1. 结论 2. 经典的几种解法 2.1 解法一:O(n*k) 2.2 解法二:O(n*logk) 2.3 解法三:O(n) 2.4 解法四:O(n*logn+k) 2.5 解法五:O(n*logn) 2.6 解法六:O(4*n+k*logn) 2.7 解法七:O(n) Reference 1. 结论 在N个乱序数字中查找第k大的数字,时间复杂度可以减小至O(N)。 ...

Microstrong 2万+

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+

求无序数组第 K 大的数

规定,第一维数据从小到大,第一维数据一样的,第二维数组也从小到大。一组,不足一组的补齐一组,并对每组进行排序(由于固定是5个数一组进行排序,所以排序的时间复杂度。),取出每组的中位数,组成一个新的数组, 对新的数组求其中位数,这个中位数就是我们需要的值。的过程, 这个过程随机选择数组中的一个数,假设叫pivot,这个过程主要作用是将数组的。大的数,接下来的元素继续入堆,但是每入一个就弹出一个,最后,堆顶元素就是整个数组的第。返回两个值,一个是左边界和一个右边界,位于左边界和右边界的值均等于。

Practitioner 2259

全新YOLO26有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

🔥《2026年YOLO26改进专栏》🔥 🚀持续更新500+最前沿创新改进点(顶会顶刊论文/独家创新策略),涵盖主干网络、各种卷积、注意力机制、检测头等模块,助力科研论文发表与模型性能提升,支持检测/分割/分类任务。订阅即获完整可运行项目,提供专业QQ答疑群,适合科研发论文(SCI/CCF/核心)及工业应用(PCB/医学/遥感检测)。专栏价格将逐步上涨,早订更优惠! ⭐特色:非计算机专业友好、模块可自由组合、全网独家创新;📌适用:研究生大论文和小论文创新、小目标检测、多领域科研应用,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 5116

【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?

本文介绍了Halcon中为XLD轮廓模板添加极性信息的实用技巧。通过先以"ignore_local_polarity"模式创建模板,首次匹配获得位置后,使用set_shape_model_metric运算符结合真实图像为模板注入极性信息(边缘明暗方向)。这种方法弥补了XLD模板初始不支持极性的缺陷,可显著提升后续匹配的精度和抗干扰能力。实验显示,添加极性信息后的模板匹配效果明显优于无极性的匹配结果。该技术特别适用于基于手动绘制或处理后的XLD轮廓创建模板的场景。

songhuangong123的博客 750

无序数组中找第K大的数_落花逐流水的博客_无序数组找k大

无序数组中找第K大的数_落花逐流水的博客_无序数组找k大

u011250186的博客 613

第三天:Python基础语法详解

Python代码规范与注释最佳实践 摘要: 本文深度解析Python缩进规则与代码结构的技术规范,包括缩进的底层原理、语法规则和错误处理。详细阐述Python注释系统,涵盖行内注释、文档字符串和类型注释等多种形式,并提供工业级代码组织方案。研究显示,良好的缩进可提升40%的代码识别速度,降低50%的认知负荷。文章还对比了Sphinx、pdoc等主流文档生成工具,给出企业级项目中的注释编写原则和模板建议,帮助开发者构建更可维护的Python代码。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1011

面试题—— 找出一个无序整型数组中第k大的数。

面试题—— 找出一个无序整型数组中第k大的数。

艾斯 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

从无序数组中找出第K大的数

该题目的两种实现方式,第一种是用堆排序(其中数组用到了二叉树的性质),第二种是利用快速排序来实现. 第一种:堆排序 最大堆进行升序排序,主要步骤是 1.初始化堆:将数列a[1...n]构造成最大堆。 2.交换数据:将a[1]和a[n]交换,使a[n]是a[1...n]中的最大值;然后将a[1...n-1]重新调整为最大堆。 接着,将a[1]和a[n-1]交换,使a[n-1]是a[...

weixin_30954607的博客 555

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素

要求找出第几名的元素是什么(找出B[i]的值)? 找出第k名的元素的值。          先从A中随机一个下标index1, 然后进行一趟快速排序等到新数组A1,排完了就知道index1对应的元素在A1中的新下标index2. 如果k等于index2,则A1[index2]就是要找的值。 如果 k小于index2 ,则在A1的以index2为分界的左部分去找。 如果 k大于index2

张波的技术积累 6113

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java寻找数组第k大数_java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素...

package test;public class RankKth{/*** invokes this method to allow array containing duplicate elements** @param index* @param direction* @return*/private int moveBound(int index, String direction){if...

weixin_39671964的博客 288

【LeetCode】快排-无序整数数组中找第k大的数(或者最小的k个数)

一个有代表性的题目:无序整数数组中找第k大的数,对快排进行优化。 这里先不说这个题目怎么解答,先仔细回顾回顾快排,掰开了揉碎了理解理解这个排序算法:时间复杂度、空间复杂度;什么情况下是复杂度最高的情况。 1.主要思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。 快排是冒泡排序的改进,改进点:冒泡排序每次只能交换相邻的两个元素,而快速排序是跳跃式的交换,交换的

凝眸伏笔的博客 9393

在无序数组中找到第k大的数

在N个元素中查找第K大元素,一般比较简单的方法就是先快速排序,然后直接返回array[N - K]或者利用扫描法,每一次扫描都找到当前数组中最大的元素,这个其实就是部分冒泡排序。前一种算法的时间复杂度是O(NlogN),后一种算法的时间复杂度是K*N。当然,这里我们不打算具体讨论以上两种方案,接下来看看其他方法。        第一种方法:利用堆排序的思想来查询数组中第K大元素。首先提取子数

huangkaipeng的博客 2959

找出数组中第k大的数

package com.threeTop.www; /** * 找出数组中第k大的数 * @author wjgs * */ public class FindK { public static void find(int[] array, int begin, int end, int k) { int i = partition(array, begin, end); if...

qq_32534441的博客 399

快速排序---寻找无序数组中的第k大的数

思路是利用快速排序: 因为快速排序的分治思想可以将查询的范围缩小 快速排序的思想: low为数组的起始点,high为数组的尾部点。交替扫描 1.固定数组的第一个数为定点,从数组的尾部high开始往左查找,直到第一个比定点小的数,和定点交换,因此当前点为空(high) 2.从数组的起始处,low找到第一个比定点大的数,赋值给High的位置 3.最后一层循环过后,low的位置是空缺的,补充...

cnoexperiencebird的博客 525

python 无序列表中第k大元素_如何寻找无序数组中的第K大元素?

如何寻找无序数组中的第K大元素?有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素。比如给定的无序数组如下所示:如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二大元素是20,第三大元素是17...... 第六大元素是9。方法一:排序法这是最容易想到的方法,先把无序数组从大到小进行排序,排序后的第k个元素自然就是数组中的第k大元素。但是这种方法的时间复杂度是O(n...

weixin_39678493的博客 1679

无序整数数组中找第k大的数

写一段程序,找出数组中第k大小的数,输出数所在的位置。 =>建立一个K个元素的最小堆!! 【解法一】 我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速排序或堆排序都是不错的选择,他们的平均时间复杂度都是 O(N * log2N)。然后取出前 K 个,O(K)。总时间复杂度 O(N * log2N)+ O(K) = O(N ...

weixin_34177064的博客 1084

面试官:海量无序数据,寻找第 K 大的数,越快越好

最近在参加阿里云举办的《第三届数据库大赛创新上云性能挑战赛–高性能分析型查询引擎赛道》,传送门: https://tianchi.aliyun.com/competition/entrance/531895/introduction。 好久没有打比赛了,也是突然来了兴致,参加性能挑战赛总有一种自己还年轻的感觉。因为比赛还没有结束,所以赛题解析还不方便这时候就写出来,但是其中一个优化点,倒是可以拿出来跟大家分享下。 简单抽象一下问题,便是今天的主题:在一个百万级无序的 long 数组中,寻找第 K 大的数。要

MayMatrix 的博客 705

无序数组找第K大的数

无序数组找第K大的数

u011250186的博客 344

无序数组中获取第k个最大数

假设数组为nums,其长度为length,大于0;k的取值总是合理的。 方法1:排序法 对数组进行排序,如果是正序,则取索引为 [length-k] 的值;如果是倒叙,则取索引为 [k-1] 的值。 方法2:选择排序法 将数组分为已排序和未排序两部分,每次从未排序中选择最大的元素,放到已排序部分的最末位置,只需进行k次操作,便可得到第k个大的元素,即索引为 [k-1] 的值。 方法3:分治法(借助快排思想) 从数组中随机选择一个数,将大于等于该数的放到该数的左侧,小于该数的放到该数的右侧。假设该数在调整之后

u011195883的博客 2400
上一篇: numpy,scipy,matplotlib,pandas等简明教程
下一篇: 数组中的最大递增子序列(Longest Increasing Subsequence<LIS>)
mlee1018
博客等级 码龄12年 36粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值