代码随想录算法训练营第三十六天|贪心算法part05

8.2周三

  •  435. 无重叠区间 
  •  763.划分字母区间 
  •  56. 合并区间 

 详细布置  

今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。 都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙! 

还是属于那种,做过了也就会了,没做过就很难想出来。

不过大家把如下三题做了之后, 重叠区间 基本上差不多了

 435. 无重叠区间 

题目:

移除区间,使区间不重叠

题解:

和昨天的气球问题很像,找到重叠区间result++

 763.划分字母区间 

题目:

划分区间,使每种字母仅在一个区间出现

题解:

1、统计26个字母每种字母出现的最远位置

2、遍历数组

3、遍历过程中更新right(区间右边界),如果right==i了,就将right- left+1(区间长度)放入result数组中

新知识:

利用hash[s[i] - 'a'] = i来获取每个字母的最远位置

 56. 合并区间  

题目:遇到重叠的区间就将其合并

题解:

1、将数组排序

2、如果遇到重叠区间,那么结果集里的最后一个区间的右边界就应该更新。更新为Max(当前右边界,遍历的区间i的右边界)

3、如果没有重叠,就将区间i加入结果集

和之前题目的不同之处是这里更新选取的右区间较大值

你可能感兴趣的:(算法,贪心算法)