zoukankan      html  css  js  c++  java
  • 笔试中遇到的一些算法问题

    算法:删除一个字符串中的数字。

    从n个数中取出m个最大的最好的算法是什么?

    有很多算法,复杂度也不尽相同。以下简单举几个例子:
    1. n×m遍扫描
    【算法基本描述】n×m遍扫描
    【算法思想】每次都扫描一遍数组,取出最大元素,这样扫描m遍就能得到m个最大的数
    【算法复杂度】O(nm)

    2.排序后取最大m个数
    【算法基本描述】对n个数排序,对拍完序后的序列取m个最大的数
    【算法复杂度】视排序的复杂度,一般为O(nlogn)或O(n^2)

    3.最小堆
    【算法基本描述】一遍扫描+最小堆
    【算法伪代码】
    00-建立一个最小堆(优先队列),最小堆的大小控制在m之内
    01-for 每个数:
    02-----if 这个数比最小堆的堆顶元素大:
    03---------弹出最小堆的最小元素
    04---------把这个数插入到最小堆
    05-最小堆中的m个元素就是所要求的元素
    06-其中最小堆的作用就是保持里面始终有m个最大元素,且m个元素中最小的元素在堆顶。
    【算法复杂度】O(nlogm) 遍历O(n) 最小堆O(logm)
    【其他】如果要求n个数中取最小的m个,只要把算法反一下即可

    总结:当n与m差不多大时,采用复杂度较低的排序是比较可取的,因为简单。当m<<n时,排序是很浪费时间的,因为我们不需要后(n-m)个数,所以可以采用最小堆的方法。
    我不敢说我的算法是最好的,但是它一定是一个复杂度较低的算法。

    最小堆图片:

  • 相关阅读:
    jquery 插件 国外
    数据库层面记录操作日志
    VS2015 发布
    SSO 单点登录
    在C#程序中模拟发送键盘按键消息
    C#中的DBNull、Null、""和String.Empty
    .Net 中通用的FormatString格式符整理
    验证码图片生成代码
    C#操作Excel知识点
    C#获取存储过程的 Return返回值和Output输出参数值
  • 原文地址:https://www.cnblogs.com/daichangya/p/12960118.html
Copyright © 2011-2022 走看看