首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

第 K 个数问题

一道经典题目。给一堆乱序数,如果它们从小到大排好,第 k 个是多少。假设排列下标从 1 开始,而非 0 开始。 这个问题如此之简单而熟悉,可它却可以是很多现实问题某一个子问题抽象。...具体来说,如果拿到若干个数组,从中任意取两个数 x 和 y,要求 x+y 各种组合里面的第 k 个,或者在全为非负数情况下引入乘法,比如 x*y+2x 所有组合里面的第 k 个。...一种办法是,通过某种排序方法(比如基于不断归并外排序),给每台机器上数据都排好序,然后从中找一个(猜一个可能为所求数)数作为 pivot,并且在每台机器上这些有序数里面都明确这个 pivot 位置...sum<k,说明这个数在每台机器上 machine[i] 往后,直到结尾这一段数中; 如果 sum>k,说明这个数在每台机器上 machine[i] 往前,直到开头这一段数中。...这个方法改变了思考角度,原本是从一堆数中去找第 k 个数,现在是从中拿出一个数来,去这堆数中找它应该在位置。 还蛮有趣

38720

个数最大k个数(java)

问题描述:个数最大k个数,如,{1,5,8,9,11,2,3}最大三个数应该是,8,9,11 问题分析:     1.解法一:最直观做法是将数组从大到小排序,然后选出其中最大K个数,但是这样解法...,复杂度是O(logn*n),但是有时候并不需要排序,用简单选择排序,或者是冒泡排序,那么就K轮交换或者是选择,就可以得出结论,复杂度是O(n*k),当K很大时候排序可能是更好解法,当K小时候用选择或者是冒泡效率会更加高...但是这都是会对前K个数进行排序,所以效率不高,当K很大时候,以上两种方法效率都不是很高。    ...2.解法二:不对前K个数进行排序,回忆快排算法中,那个partition函数,就是随机选择数组中个数,把比这个数数,放在数组前面,把比这个数数放在数组 后面,这时想如果找出随机数,最终位置就是...K,那么最大K个数就找出来了,沿着这个思路思考问题,但是这个函数,最后索引位置并不一定是K,可能比K大也可能比K小,我们把找出数组分成两部分sa,sb,sa是大部分,sb是小部分,如果sa长度等于

82020

【递归】递归n个数最大值

作者:每天都要记得刷题(●’◡’●) 时间:2022/04/04 本篇感悟:举一反三,由 n阶乘联想到递归n个数最大值,对递归有了更深了解。...文章目录 ⭐题目(代码在文末) ⭐递归思想 ⭐前n个斐波那契数 ⭐具体代码(答案) ⭐题目(代码在文末) 使用递归 55 ,22, 155, 77, 99这5个数最大值 ⭐递归思想 Q...A1:我们学过函数,知道了函数调用,函数调用就是一个函数调用其他函数,比如主函数调用个数之和。...往里套用就是: 关键:重复把最大值这个过程重复再重复,知道找到递归出口 1.当数组只有一个元素时候,这个数就是最大值 2.但是当n>1时,从数组下标大一端开始自身调用**,将最后一个数和n-...1个数最大值进行比较(假设我们已知)** 3.然后就是n-1个数最大值,也就是重复了以上步骤 4.知道我们到了递归出口,再归回去就可以了。

1.2K20

c语言n个数中位数_用频率直方图平均数

大家好,又见面了,我是你们朋友全栈君。 平均值 中位数 众数 在习题8.8基础上, 用一个整型数组feedback保存调查40个反馈意见。...用函数编程计算反馈意见平均值(Mean) 、中位数(Median) 和众数(Mode) 。中位数指的是排列在数组中间数。如果原始数据个数是偶数,那么中位数等于中间那两个元素算术平均值。...众数是数组中出现次数最多个数(不考虑两个或两个以上反馈意见出现次数相同情况)。...(因为一开始没想到T^T ⚠修改: 谢谢@囷囷jn 提醒,确实一开始中位数部分只考虑了N为奇数情况(学校oj居然给我AC了,太BUG了),没有考虑N为偶数情况,目前已修改。...修改过程中发现了一个很恐怖事情,我一开始在中位数函数部分,冒泡排序时候数组⚠越界了!!!越界真的是很恐怖事情,感受到了!!!

1.2K10

Python|个数最少加数

问题描述 给定一个正整数N,将其表示为数字1,2,5,11相加形式输出。要求上述数字出现总次数最少(每个数字可以重复使用) 样式要求: 输入说明:一个正整数N (N<= 10000)。....输出说明:正整数N由1,2,5,11组成加法表达式,要求非递增排列。...输入样例: 21 输出样例: 21=11+5+5 解决方案 要使数字总数最少,就应该从最大数开始 用整除确定该加数数量 用同样方法确定其他加数数量 应为格式要求是[]=[]+[]+[]…所以只能由字符串来实现也就是字符串拼接...因位最后一位没有加号所以只输出到倒数第二位就是所要求了 Python代码: N=int(input()) a=N//11 b=(N-a*11)//5 c=(N-a*11-b*5)//2 d=

78510

10亿个数字里里面找最小10个

什么是TOP K问题 Top K指的是从n(很大)个数据中,选取最大(小)k个数据。例如学校要从全校学生中找到成绩最高500名学生,再例如某搜索引擎要统计每天100条搜索次数最多关键词。...堆排序解决TOP K 对于TOPK问题,解决方法有很多: 方法一:对源数据中所有数据进行排序,取出前K个数据,就是TopK。 但是当数据量很大时,只需要k个最大数,整体排序很耗时,效率不高。...最小堆思路 最小堆(小根堆)是一种数据结构,它首先是一棵完全二叉树,并且,它所有父节点值小于或等于两个子节点值。 最小堆存储结构(物理结构)实际上是一个数组。...最小堆解决TOPK 最小堆实现: public class MinHeap { // 堆存储结构 - 数组 private int[] data; // 将一个数组传入构造方法...个数 private static int[] topK(int[] data,int k) { // 先取K个元素放入一个数组topk中 int[] topk

3.9K20
领券