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)个数,所以可以采用最小堆的方法。
    我不敢说我的算法是最好的,但是它一定是一个复杂度较低的算法。

    最小堆图片:

  • 相关阅读:
    游戏开发之游戏策划的基本原则
    Lua游戏脚本语言入门
    游戏策划之游戏心理学理论深入浅出
    微博的10大特征包括哪些?
    普米族求助,十万火急!!! 请大家给力!!!
    剑指微博营销,速创品牌传奇
    将网络推广进行到底
    浅谈如何利用微博进行网站推广(转)
    “土风计划”,陈哲另一个伟大事业
    快速增加微博粉丝的十六大技巧
  • 原文地址:https://www.cnblogs.com/daichangya/p/12960118.html
Copyright © 2011-2022 走看看