怎 样 求 出 一 个 数 组 中 第 N 大 的 元 素

r11222 2010-08-05 02:22:00
数组很大,很大,很大。。。。
...全文
1063 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
s924987866 2012-10-16
  • 打赏
  • 举报
回复
把传过来的数组的内容拷贝到新的数组,然后排序,从大到小,这样就可以了
killallpigs 2010-09-02
  • 打赏
  • 举报
回复
很好,N人很多,来学习……
zdl110110 2010-08-16
  • 打赏
  • 举报
回复
另外建立一个大小为N的数组P,初始化为前N个元素,对P排序,遍历数组,跟P中元素进行比较,更新数组P。省去排序
2010-08-16
  • 打赏
  • 举报
回复
学习。。。。
BuleRiver 2010-08-16
  • 打赏
  • 举报
回复
位图。
Simao 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 jamesf1982 的回复:]
和爱立信的面试题一样。

其实就是设计一个大小为N的特殊数据结构,并实现1个接口,将输入当前值,并将最小值踢出。

思路就是:
1,对N个元素排序
2,将新元素和最小值比较
3,如果要剔除最小值,将新元素插入数据结构中。

重点在于这个数据结构如何设计,链表or数组,或者混合体?
[/Quote]
up...
zrebecca 2010-08-16
  • 打赏
  • 举报
回复
数据结构怎么设计?
codesnail 2010-08-16
  • 打赏
  • 举报
回复
paixu
james_hw 2010-08-16
  • 打赏
  • 举报
回复
和爱立信的面试题一样。

其实就是设计一个大小为N的特殊数据结构,并实现1个接口,将输入当前值,并将最小值踢出。

思路就是:
1,对N个元素排序
2,将新元素和最小值比较
3,如果要剔除最小值,将新元素插入数据结构中。

重点在于这个数据结构如何设计,链表or数组,或者混合体?

ForestDB 2010-08-07
  • 打赏
  • 举报
回复
不太关心数组有多大,比较关心n有多大。
r11222 2010-08-07
  • 打赏
  • 举报
回复





[Quote=引用 33 楼 kusey 的回复:]

输入N个元素以及一个整数k,找出第k个最大的元素。
1. 把这些元素读入数组并将它们排序,返回适当的元素。
2. 将k个元素读入数组并排序,把最小的放在第k个位置,接下来一个一个地处理剩余元素。先把它与数组中第k个元素比较,如果该元素大,则删除第k个元素,把这个元素添加到数组中适当的位置,算法结束时,第k个位置上的元素就是问题的答案。
3. 建立一个最大堆,把这些元素添加进去,然后……
[/Quote]



不错不错
huayiluo 2010-08-07
  • 打赏
  • 举报
回复
学习 回复内容太短了!
fengqiao1999 2010-08-07
  • 打赏
  • 举报
回复
建立一个双向循环链表,先将K的数添加到链表中,保持从小到大的顺序,然后读取剩余数据,
如果小于最小值,直接丢弃,如果大于最小值,在适当位置插入该元素,丢弃一个最小值,保持链表的队形。
复杂度也就O(k*n),当然也可以首先扫描一遍数组,找出一组合适的数据作为初始值。
sky_pearl 2010-08-07
  • 打赏
  • 举报
回复
排序,然后按下标找就好了~~要找大的就按从大到小排
w_shun 2010-08-07
  • 打赏
  • 举报
回复
先排序,然后找出第N大的数组,因为你的数组“很大很大”,所以排序算法选择应谨慎。
neverby 2010-08-07
  • 打赏
  • 举报
回复
1.取第一个数为要的数字T
2.读入下一个数 如果这个数比T大 那就保存下来 如果保存的数字已经大于k个了 那么就把认定是正确的k的大数往前一个 原来的数字就可以丢弃了 也就是变成比这个数大的最小的那个 如果这个数比比T小 那么也是分2种情况 如果保存下来的个数小于k个 那么T就等于度进来的数字 并且k+1 如果保存下来的个数已经是k歌那么 就不要加进来了 一直这样读下去 读完整个N个数字 答案就出来了
kusey 2010-08-07
  • 打赏
  • 举报
回复
输入N个元素以及一个整数k,找出第k个最大的元素。
1. 把这些元素读入数组并将它们排序,返回适当的元素。
2. 将k个元素读入数组并排序,把最小的放在第k个位置,接下来一个一个地处理剩余元素。先把它与数组中第k个元素比较,如果该元素大,则删除第k个元素,把这个元素添加到数组中适当的位置,算法结束时,第k个位置上的元素就是问题的答案。
3. 建立一个最大堆,把这些元素添加进去,然后执行k次DeleteMax操作,从堆中最后提取出来的元素就是第k大元素。
4. 建立一个最小堆,往里边添加k个元素,则第一个元素是最小的,然后判断剩余的元素,如果该元素比第一个元素大,则执行DeleteMin,然后把该元素添加进来。执行完毕,堆中第一个元素就是第k大元素。
cao_julians 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 senr0816 的回复:]
创建一个大小为N的子数组,初始化为前N个数,然后遍历整个数组,得到前N个最大的数
[/Quote]
正确。只需遍历整个数组一次,不过要与N个元素的(有序)子数组比较--建议用二分查找、插入
guoxr888 2010-08-06
  • 打赏
  • 举报
回复
排序不实际 动态的先把数据采用一种合适的数据结构再考虑算法吧
多喝水ooo 2010-08-06
  • 打赏
  • 举报
回复
冒泡n趟也可以吧?
加载更多回复(28)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧