首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C/C++基础

    数组中 K 的数

    循环往复,直至找到 K 的数。 复杂度分析: 时间复杂度:平均 O(n)。假设数组是无序的,每一次划分将数组一分为二。第一次划分时间复杂度是 O(n),第二次划分是 O(n/2)。 最差的情况,最后一次即 logn 次找到 K 的数,那么时间复杂度为 n + n/2 + n/4 + … + 1 = O(n)。 空间复杂度:O(1)。没有借助辅助空间来存放数组。 5.实现示例 5.1 C++ // findKthLargest 寻找数组中 K 的数。 / findKthLargest 寻找数组中 K 的数。 if len(nums) - i == k { return nums[i] } // K 的数在右区间。

    1.5K10编辑于 2022-09-27
  • 来自专栏code人生

    查找数组中K的元素

    is: %d\n", k, result) } 上述代码使用快速选择算法来查找 K 的元素,其中 quickSelect 函数递归地在左半部分或右半部分查找,直到找到 K 的元素。 分治算法示例 使用分治算法查找数组中 K 的元素是一种高效的方法,其时间复杂度为 O(n)。 然而,你可以结合冒泡排序的思想来查找数组中 K 的元素。具体方法是对数组进行 K 次冒泡排序,每次冒泡排序将当前最大的元素移动到数组的末尾,然后查找 K 的元素。 K 的元素位于数组倒数 K 个位置 return nums[len(nums)-k] } func main() { arr := []int{3, 2, 1, 5, 6, 4} 最后, K 的元素位于数组倒数 K 个位置。这个算法的时间复杂度是 O(K*n),其中 n 是数组的长度。虽然不是最高效的算法,但对于小 K 值或小数组来说,是可行的方法。

    1.9K20编辑于 2023-10-31
  • 来自专栏全栈程序员必看

    ACdream 1099 瑶瑶的K

    瑶瑶的K Time Limit: 10000/5000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) SubmitStatisticNext 尴尬了一阵子,机智的瑶瑶就提议:“这样吧,你说N个整数xi,然后在任意说一个数字k,我可以高速地说出这些数字里面 k 的数字。” Input 1行 两个整数N, K以空格隔开; 2行 有N个整数(可出现相同数字,均为随机生成),相同以空格隔开。 0 < n ≤ 5*10^6 , 0 < k ≤ n 1 ≤ xi ≤ 10^8 Output 输出 k 的数字。 Sample Input 5 2 5 4 1 3 1 Sample Output 4 Hint 如22,1中三个数字中第一数字为2,第二数字也为2,第三数字为1 。

    32520编辑于 2022-07-12
  • 来自专栏CSDN旧文

    K短路+严格K短路

      所谓K短路,就是从s到t的K短的路,1短就是最短路。     如何求K短呢?有一种简单的方法是广度优先搜索,记录t出队列的次数,当tk次出队列时,就是k短路了。 2. 定义估价函数。我们定义g(n)为从s到n所花费的代价,h(n)为dis[n],显然这符合A*算法的要求。     3. 初始化状态。状态中存放当前到达的点i,fi,gi。 每个节点最多入队列K次,当t出队列K次时,即找到解。     例:POJ2449     题意:裸的K短路。 queue> using namespace std; const int INF = 0x3f3f3f3f; const int MAX = 1005; int n,m; int start,end,k; return now.f; //严格最短路的判断条件为 cnt[end] == k&&now.f>min(zuiduanlu)         if(cnt[now.v] > k)            

    80020发布于 2020-10-28
  • 来自专栏Michael阿明学习之路

    算法--排序--寻找数组内K的元素

    等于就返回哨兵,不等则在一侧递归调用该划分方法 复杂度:平均情况下,遍历一次数组找到哨兵是n,下一次就是n/2,最后到1,中间最多需要k次(k=lg2n) 等比数列求和:n+n/2+n/4+n/8+… 所以复杂度为O(n) 代码实现 /** * @description: 寻找K的元素 * @author: michael ming * @date: 2019/4/13 13:02 * @ ; cin >> N; int arr[N]; generateArr(arr, N); printArr(arr, N); cout << "请输入K:程序将查找 K的元素。" ; printArr(arr, N); cout << "" << K << "的元素是:" << findkthelem(arr,N,K,0,N-1) << endl; return

    94230发布于 2021-02-20
  • 来自专栏AILearning

    【机器学习实战】2K-近邻算法(k-NearestNeighbor,KNN)

    2k-近邻算法 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js? config=default"></script> KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法主要是用来进行分类的. 动作片:打斗次数更多 爱情片:亲吻次数更多 基于电影中的亲吻、打斗出现的次数,使用 k-近邻算法构造程序,就可以自动划分电影的题材类型。 现在根据上面我们得到的样本集中所有电影与未知电影的距离,按照距离递增排序,可以找到 k 个距离最近的电影。 对求得的所有距离进行排序(从小到,越小表示越相似)。 取前 kk 一般小于等于 20 )个样本数据对应的分类标签。 求 k 个数据中出现次数最多的分类标签作为新数据的分类。

    1.1K70发布于 2018-01-05
  • 来自专栏面试经验贴

    2 数据流中的K大元素

    1 Leetcode703 数据流中k大元素 设计一个找到数据流中K大元素的类(class)。注意是排序后的K大元素,不是K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中K的元素。 示例: int k = 3; int[] arr = [4,5,8,2]; KthLargest kthLargest = new KthLargest(3, arr); kthLargest.add 第二种情况,比堆顶元素,那么淘汰堆顶,更新堆结构,因为每次从堆中取出元素,为O(1),每调整一次堆为O(log2k)。所以整体复杂度为O(n*log2k)。咱们动画理解下这个过程。 2 python版本 ? 3 java版本 ?

    64010发布于 2020-06-05
  • 来自专栏wym

    P3834 【模板】可持久化线段树 1(主席树) (多次查询kk小)

    else t[now].r = update(mid+1,r,t[last].r,p); } return now; } int query(int u,int v,int l,int r,int k) l; // v 左孩子包含点个数减去 u 左孩子包含点的个数 int tmp = t[t[v].l].num - t[t[u].l].num; int mid = (l+r)>>1; if(k< =tmp)return query(t[u].l,t[v].l,l,mid,k); else return query(t[u].r,t[v].r,mid+1,r,k - tmp); } int main +sz+1,a[i]) - b; for(int i=1;i<=n;i++) sum[i] = update(1,sz,sum[i-1],a[i]); while(m--){ int u,v,k; ,k); printf("%d\n",b[ans]); } return 0; }

    70710发布于 2019-05-07
  • 来自专栏学习成长指南

    蓝桥杯---数组里面的k的元素(leetcode215题)题解

    1.题目重现 之前是对于数组排序,找出来这个数组里面的最大的或者是最小的元素,但是这个题目是找出来排序之后的这个数组里面的k的元素; 2.案例说明 我觉得这个题目上面的解释足够清楚,这个案例也就没什么好说的 ,其实是很容易理解的: 就是给我们传递进来一个数组,我们需要在这个数组里面的这么多个数字里面找到K的元素; 3.思路介绍 思路就是数组分为三块,随机的进行基准元素的选择: 其实现在回想起来,这个思路贯穿了始终 ,从我们的最开始的那个颜色的分类问题,就是0,1,2我们是有基准元素的,到后来的这个快速排序算法,再到现在的这个topK问题,也就是最大的K个元素,实际上我们都是利用的这个数组划分为三块的这个思想; ,我们在这个right,r区间里面去寻找k的元素就可以了; 以此类推,如果是在第二块里面的话,因为全部都是等于我们的key,直接返回这个基准元素就可以了; 上面的两个情况都不满足的情况下,这个时候就需要在我们的最左边的那一块里面去找地 k-b-c的元素; 4.代码分析 下面的这个findKlargest函数就是去寻找我们的数组里面的这个最大的元素 总体来看,就是调用qsort函数,然后我们去实现这个函数,函数里面的数组分三块的时候涉及到了数据元素的交换

    28610编辑于 2025-02-25
  • 来自专栏机器学习入门

    挑战程序竞赛系列(18):3.1查找k的值

    https://blog.csdn.net/u014688145/article/details/73649803 挑战程序竞赛系列(18):3.1查找k的值 详细代码可以fork 这种关于查找k的二分模式还和我之前遇到的一般二分模式有所区别,可以观察它的while循环结构: while (rt - lf > 1){ long mid = (rt + lf ) / 2; if (check(mid)) rt = mid; else lf = mid; } System.out.println(rt); 嘿,这样就能找到 k的值了,神奇。 ,在rt+1的右边也不可能是m小的值,在rt处能够满足>=m。

    42840发布于 2019-05-26
  • 来自专栏架构之路

    寻找K元素的八算法、源码及拓展

    一、问题描述  所谓“(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从到小顺序的(前)k个数的问题。 K大问题可以是现实问题,譬如竞价排名中的K个排名,或者多个出价者中的K价格等等。 很好理解,利用快排对所有元素进行排序,然后找到K个元素即可。 解法2: 利用选择排序或交互排序,K次选择后即可得到k的数。总的时间复杂度为O(n*k)。 也是初级解法,且很鸡肋。 2. 如果是找km(0<k<=m<=n)的数呢?     解答:如果把问题看做m-k+1个k大问题,则前面解法均适用。 比如我们可以返回相关性10 001的网页,而不是9999的。在这种情况下,算法该如何改进才能更快更有效率呢?网页的数目可能到一台机器无法容纳得下,这时怎么办呢?       提示:归并排序?

    3K60发布于 2018-03-19
  • 来自专栏数据结构与算法

    1979 K个数

    1979 K个数 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字 a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中k的数字减去k小的数字的值m,并判断m是否为质数。 (0<k<=n) 输入描述 Input Description 第一行为2个数n,k(含义如上题) 第二行为n个数,表示这个序列 输出描述 第二行为这个数m 否则  第一行为'NO' 第二行为这个数m 样例输入 Sample Input 5 2 1 2 3 4 5 样例输出 Sample Output YES 2 数据范围及提示 Data Size & Hint 20%数据满足0<n<=10 50%数据满足0<n<=5000 100%数据满足0

    65780发布于 2018-04-13
  • 来自专栏Michael阿明学习之路

    找出数组中的 K 整数(排序)

    题目 2. 解题 1. 题目 给你一个字符串数组 nums 和一个整数 k 。 nums 中的每个字符串都表示一个不含前导零的整数。 返回 nums 中表示 k 整数的字符串。 例如,如果 nums 是 [“1”,“2”,“2”],那么 “2” 是最大的整数,“2” 是第二的整数,“1” 是第三的整数。 示例 1: 输入:nums = ["3","6","7","10"], k = 4 输出:"3" 解释: nums 中的数字按非递减顺序排列为 ["3","6","7","10"] 其中 4 整数是 "3" 示例 2: 输入:nums = ["2","21","12","1"], k = 3 输出:"2" 解释: nums 中的数字按非递减顺序排列为 ["1","2","12","21"] 其中 3 整数是 "2" 示例 3: 输入:nums = ["0","0"], k = 2 输出:"0" 解释: nums 中的数字按非递减顺序排列为 ["0","0"] 其中 2 整数是 "0"

    1.2K30发布于 2021-09-06
  • 来自专栏从小白开始修炼

    最长回文子串&最长子串&K的数字&atoi

    文章目录 最长回文子串 中心扩散法 代码实现 无重复字符的最长子串 数组中的 k 的数字 字符串转换整数 (atoi) 最长回文子串 解题思路:中心扩散法 中心扩散法 其实,我们知道,对于回文子串来说 (right-left):count; } return count; } 数组中的 k 的数字 解题思路:利用堆的应用,topK问题。 题目是要找数组的K的数字,我们利用K个数建成一个小堆(向下调整算法)。 剩下的数N-k个数我们去和堆顶进行比较,因为是要找K的数字,如果比堆顶,我们就把堆顶替换,同时进行向下调整,最终堆顶就是K的数。 } for(int j = (k-1-1)/2;j>=0;j--) { AdjustDown(minHeap,k,j); }

    42710编辑于 2022-11-15
  • 来自专栏小樱的经验随笔

    HDU 2639 Bone Collector II(01背包变形【K最优解】)

    Sample Input 3 5 10 2 1 2 3 4 5 5 4 3 2 1 5 10 12 1 2 3 4 5 5 4 3 2 1 5 10 16 1 2 3 4 5 5 4 pid=2639 题目大意:        见之前的收集骨头的博客,题意类似,给定背包容量,骨头的个数和每个骨头的价值,这次不是求在背包容量允许的情况下,最多装的价值,而是求在背包容量内,可以装的k价值 ,如果没有k个最大值,那么输出0       输入包括多组样例,第一行输入一个T,样例的个数,接下来每个样例都有三行,第一行包括三个整数,N,V,K,分别代表骨头的个数,背包的容量,我们需要输出的K 输出K个最大价值,每个样例输出一行 思路:简单的01背包基础上做,要求的是K个最大值,那么不用dp[j]=max(dp[j],dp[j-w[i]]+v[i])的状态转移方程,而是将两个值都记录下来, 用for循环走一遍,记录下,容量为1到M的各个最大价值,dp[i][j]表示当背包容量为i时的j个最大价值,最后只需要输出dp[m][k]即可!

    97750发布于 2018-04-08
  • 来自专栏InvQ的专栏

    K小数——折半删除

    problem 给定两个大小为 m 和 n 的正序(从小到)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 空间复杂度O(m+n) solution 2 —— 双指针法 相比solution 1 ,不用创建额外的数组,空间复杂度O(1) ? solution 3 —— K小数 ? ? ? ? ? ? int end2, int k) { int len1 = end1 - start1 + 1; int len2 = end2 - start2 + 1; , nums1, start1, end1, k); if (len1 == 0) return nums2[start2 + k - 1]; if (k == 1) ,我们就减少 k/2 个元素,所以时间复杂度是 O(log(k),而 k=(m+n)/2,所以最终的复杂也就是 O(log(m+n)O(log(m+n)。

    53340发布于 2020-12-08
  • 来自专栏九彩拼盘的叨叨叨

    前端学习 22

    :link和:visited伪类的书写顺序 作业 写满足以下条件的选择器 类名不为not-normal-input的文本框(<input type="text">)元素的获得焦点状态 在父元素中倒数2 个a元素 在父元素中3个整数倍,但不包括0,3的a元素

    22340发布于 2018-08-27
  • 来自专栏Java

    每日刷题(有效括号序列,滑动窗口最大值,最小的K个数,寻找K

    6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5 PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a,b)->{return b-a;}); //创建大小为k根堆 maxHeap.offer(input[i]); } } return new ArrayList<>(maxHeap); } } 寻找k 描述 有一个整数数组,请你根据快速排序的思路,找出数组中 k 的数。 给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回 k 的数(包括重复的元素,不用去重),保证答案存在。

    23710编辑于 2024-11-25
  • 来自专栏算法其实很好玩

    Day6-线性表-堆-数组中K的数

    二 直接上题 Q:已知一个未排序的数组,求数组中K的数 如:array = 【3,2,1,5,6,4】,k = 2,那么结果就是5 三 完整代码及运行结果 冷静分析: 如果你这时候对面试官说 所以记住就好:关于kk小的,前k个,等等,这种问题,甭想,面试官一定想问你的是,堆。 拿题目举例 3压入堆[3] 2压入堆并自动调整[2,3] 1比当前堆顶2,小,不操作 5比2,弹出2压入5并调整,[3,5] 6比堆顶3,弹出3压入6并调整,[5,6] 4比堆顶5,小,不操作 最后的大小为 2的,最小堆,[5,6] 堆顶元素5,即为2的数??? less_heap.push(nums[i]); } } return less_heap.top();//堆顶即为K的数 } int main(){ vector

    88820发布于 2019-07-16
  • 来自专栏Michael阿明学习之路

    找出 K 的异或坐标值(DP)

    请你找出 matrix 的所有坐标中 k 的值(k 的值从 1 开始计数)。 示例 2: 输入:matrix = [[5,2],[1,6]], k = 2 输出:5 解释:坐标 (0,0) 的值是 5 = 5 ,为 2 的值。 示例 3: 输入:matrix = [[5,2],[1,6]], k = 3 输出:4 解释:坐标 (1,0) 的值是 5 XOR 1 = 4 ,为 3 的值。 示例 4: 输入:matrix = [[5,2],[1,6]], k = 4 输出:0 解释:坐标 (1,1) 的值是 5 XOR 2 XOR 1 XOR 6 = 0 ,为 4 的值。 取K的值,偷懒直接排序做,时间复杂度 O (

    56610发布于 2021-02-19
领券