zoukankan      html  css  js  c++  java
  • 查找一组数最大值和最小值

    首先想建堆的办法,需要n/2 * 2次比较,至多n/2次交换建立大根堆或者小根堆;假设建立的是大根堆,对叶子节点进行n/2-1次比较的到最小值,比较次数3n/2。这个方法还可以用于得到最大的或者最小的前k个数,只需建堆后进行层次遍历即可。

    另一种方法是假设数组的前两个数时最大值和最小值,然后每次从后面的元素中取出两个,这两个中大的跟“最大值”比较,小的跟"最小值"比较,根据比较情况进行交换,这样每组数进行了三次比较,总共比较了n / 2 * 3次,可能交换次数也是 n/2,可见跟建堆的方法复杂度差不多, 也是3n/2,当然具体根据个数的奇数偶数差个一次二次的。

    这里有篇文章,关于查找n个数中最大的k个数的,讲的不错,收藏了,感谢原作者。

    http://yilee.info/find-the-largest-k-figures-in-the-beauty-of-programming.html

  • 相关阅读:
    go包初始化顺序
    go map
    go包管理
    C++ 线程池
    RAFT共识算法笔记
    最大子序列和
    常见网络攻击及其防御
    go常用标准库功能
    using代替typedef
    typename和class的区别
  • 原文地址:https://www.cnblogs.com/liujiahi/p/2196368.html
Copyright © 2011-2022 走看看