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

第 K 个数的问题

给一堆乱序的数,如果它们从小到大排好,第 k 个是多少。假设排列的下标从 1 开始,而非 0 开始。 这个问题如此之简单而熟悉,可它却可以是很多现实问题的某一个子问题的抽象。...如果这堆数不是放在一起,而是在若干个数组里呢? 前面说了,如果这堆数只在一个数组里,有两种办法可以排序,如果是在若干个不同的数组里呢?一样可以从快排和堆排序两个思路去分析。...其中 idx 就存放着第几个堆(下标),num 为实际存放的数值: class Item { int num; int idx; public Item(int num, int...具体来说,如果拿到若干个数组,从中任意取两个数 x 和 y,要求 x+y 的各种组合里面的第 k 个,或者在全为非负数的情况下引入乘法,比如 x*y+2x 的所有组合里面的第 k 个。...这个方法改变了思考的角度,原本是从一堆数中去找第 k 个数,现在是从中拿出一个数来,去这堆数中找它应该在的位置。 还蛮有趣的。

36620

个数组的最大k个数(java)

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

80020

C语言 | 奇偶数个数

例96:C语言编程奇偶数的个数。  解题思路:奇数是指指不能被2整除的整数;偶数是能够被2所整除的整数。... main()//主函数  {   int i,n,m; //定义整型变量    int odd_Number=0,even_Number=0; //同上且赋初值    printf("请输入要判断几个数...:");   scanf("%d",&n);//输入整数的个数    printf("输入这几个数:");   for(i=0;i<n;i++) //循环    {     scanf("%d",&m)...    }   }   printf("奇数:%d个\n偶数:%d个:\n",odd_Number,even_Number);   return 0;//函数返回值为0  } 编译运行结果: 请输入要判断几个数...:5 输入这几个数:1 3 4 6 8 奇数:2个 偶数:3个: -------------------------------- Process exited after 8.497 seconds

2.9K22
领券