区间搜索问题可以细分为两类
- 给定数组,在所有的子数组里寻找满足某种条件的子数组
- 给定数组,和子数组的尺寸,从所有尺寸相符的子数组里提取一组值。
第一类区间搜索问题代码框架
暴力穷举:
result[]
left
right
eigenvalue
for(left in range(n)){
for(right in range(left, n)){
eigenvalue = Eigen(array, left, right);
if(MeetCondition(eigenvalue))
result.append((left, right))
}
}
解释:暴力解法让left从数组左边界连续增加到数组右边界,让right从left开始连续增加,到达数组右边界后回退到left重新开始连续递增。这种解法穷尽了left和right的所有可能取值然后从中挑选满足条件的子数组。算法时间复杂度O(n^2).
示例:
优化解:
result[]
left = right
eigenvalue
while(left < n){
while(condition_2){
eigenvalue = Eigen(array, left, right)
if(MeetCondition(eigenvalue))
result.append((left, right))
right++
}
while(condition_1){