• 名企算法题目总结(2)


    5.栈实现另外一个栈排序

    分析: 插入排序

     6.滑动窗口每步中,最大的元素值

     0  1  2   3  4  5   6    7

     4  3  5  4  3  3  10    12  假设窗口大小w=3,则结果为5,5,5,4,10,12

     分析: 给定一个结构,每次添加一个元素,删除一个元素,求结构中最大值?

        如果这个结构是一个大顶堆,需要知道删除节点的堆index,可以用一个hash映射实现,调整堆时间复杂度为log(w);最终时间复杂度为N*log(w)

    分析2:本题,删除元素有规则可循,相当于一个约束条件

         结构使用一个队列,队头为当前最大值的index,每次滑动删除元素,判断是否出队头,添加元素,判断该值能在队列中排第几位(此时添加的元素生存期肯定大于前面的元素,前面比他小的都可以删除了).

       因此队列结构变化为:0->01->2->23->234->35->6->7

    7. 窗口能框出来的最大值,框中的高以框中的数中最小的计算,宽就是index范围

     3 4 5 4 3 6  能框出来 3*6=18,为最大

       划出 R2控件高度变化折线,定义结算时刻为下降的时候,结算到 下降的最低高度

       需要用栈模拟,时间复杂度O(n) 控件O(n)

    8.子窗口集中最大值减去最小值小于num的子窗口个数

     3 4 5 5 6 5 2 

       算法1: 给定 [i,j]窗口计算最大值与最小值(数组中所有窗口的最大最小值)

        时间复杂度O(n)

        滑动窗口,用某结构记录[i,j](双端队列,一头大,一头小),i,j变化时候,更新队列

     算法2: 若[i,j]不满足,那么包含[i,j]的所有窗口都不满足

         若[i,j]不满足,那么必然存在一个[i+d,j]的窗口满足

       融合算法1与算法2可以解决问题

       

      

  • 相关阅读:
    Door man
    Borg Maze
    Agri-Net
    Highways
    Truck History
    Arctic Network
    QS Network
    用贝塞尔曲线实现水波效果
    在一个Label上设置多种颜色字体
    用UIImageView作出动画效果
  • 原文地址:https://www.cnblogs.com/sofard/p/9924164.html
Copyright © 2020-2023  润新知