zoukankan      html  css  js  c++  java
  • 面试题 M大小的数组中选出前N个元素

    已知一个大小为M的数组  里面放着M个整数

    现在要找出前n个最大的元素

    问:

      最优的算法,时间复杂度和空间复杂度

    解法有很多,最好的不好找, 这里随便先举几个一般的:

      1.先给M的数组做一次排序 那么前n个元素就是结果, 假设用快速排序 那么时间复杂度就是 M*logM

      2.已知使用冒泡法找出最大的一个元素, 需要M次, 那么找出N个,就需要M*N ,如果N很小这个算法就很优化

    补充

    以下是个人觉得最好的算法(快速排序的一部分)

    随机在m中挑选一个值,  然后比m小的放在m左边, 比m大的放在m右边

    假设右边有c个元素, 如果c小于5个, 在左边的元素中继续寻找 最大的n-c个元素, 

    否则丢弃所有左侧元素, 在右侧中继续寻找最大的n个元素

    递归,不断丢弃元素 直到最后找到所有的前n大元素

  • 相关阅读:
    数据查询
    泰勒展开及其应用
    搜索排序算法
    因子分解机 FM
    偏差方差分解
    Softmax 损失-梯度计算
    目标检测网络之 Mask R-CNN
    目标检测网络之 R-FCN
    深度学习-conv卷积
    目标检测网络之 YOLOv3
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/1923717.html
Copyright © 2011-2022 走看看