今天状态不太好,笨笨的。。只做了一道题
- 435题,无重叠区间,即给出区间求出若要无重复区间,最少要去掉多少区间?
有四种方法,分别是
(1)以起点排序的动态规划
整体的动态规划:要考虑,1. 保留当前区间 j<i,求得max{ dp[j]+1} 2. 不保留当前区间,dp[i]=dp[i-1]
如果是以起点排序的话,最后一个区间一定是存在的。根据贪心。所以第二个选择可以忽略。同时,对于第一个选项,因为是起点排序,只存在以下可能。所以存在 m>n&&dp[m]<dp[n] 。只能优化第二个选项。
|----------| |-----------------| |----------------|
|----------| |-----------------| |------|
第一种情况 dp[m]=dp[m-1]+1
第二种情况 dp[m]>dp[m-1],根据贪心,与前面相交的情况,m-1要多。
第三种情况 dp[m]<dp[m-1],同上。
但是必须每个初始化为1。即保留当前的。
(2)以终点排序的动态规划
整体的动态规划满足,也有三种情况
|--------------| |----------------| |---------------|
|-----------------| |---------------| |-------------------------|
对于第二个选项,不能满足,因为上面第三种情况,是保留前一个,而不是保留后一个。
对于第一个选项,存不存在 m>n&&dp[m]<dp[n]呢?不存在的。
所以只能优化第一个选项
(3)以起点排序的贪心算法
同上面起点排序的动态规划的三种可能。复制在下面
|----------| |-----------------| |----------------|
|----------| |-----------------| |------|
第一种情况,保留,可保留的区间+1,
第二种情况,保留前一个,不做操作。
第三种情况,保留后一个,删掉前一个。
(4)以终点排序的贪心算法
三种情况复制在下面
|--------------| |----------------| |---------------|
|-----------------| |---------------| |-------------------------|
第一种情况,保留。
第二种情况,保留前一个,
第三种情况,保留前一个。
言而总之,动态规划向前看,为前面留空间,贪心向后看,为后面留空间。
- 1095题。山脉数组查找目标值
1. 找出山脉的峰值
2. 左边二分
3. 右边二分