[算法数据结构] 贪心算法中的区间问题

96 阅读2分钟

这里总结9.11-9.13 日做的关于贪心算法中的区间问题,共三题:用最少数量的箭引爆气球、无重叠区间、划分字母区间。

  • 用最少数量的箭引爆气球

本质上这是寻找多个区间中,有多少组区间存在重叠,因为求出来多少组区间存在重叠就意味着可以最少用多少支箭来将其引爆。 1.想出来了先按照xstart 从小到大来进行排序。利用自己写的冒泡排序超时,自己写cmp利用sort函数来不会超时。2.排好序之后,如何进行累加求解重叠的区间呢?理解一点,在遍历的时候求最小右区间,因为和下一个区间的左区间大小关系决定了这两个区间是否有重叠关系,因此在根据左区间的大小排完序区间之后,依次遍历,更新最小右区间,当右区间比下一个区间的左区间小时,将箭的数量加一。

  • 无重叠区间

其实和上一个题类似,在上一个题目的基础上,求出来有几组区间存在重叠,那么就用总的区间个数减去组数,就能得出来,去掉几个区间就能保证剩下的区间没有重叠。

  • 划分字母区间

这道题目主要要理解两点:1.如何找到每个字母出现的最远区间。2. 为何要更新每个字母的最远出现的位置?第一个问题,利用hash[27]来进行赋值。2.因为只有那样,才能将区间尽可能多的分割开,并且每个字母都只出现一个区间里面。

感觉还没有太感觉出来在区间问题中的套路。继续总结吧,用心体会。