题目描述
给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况:
max(arr[i...j]) - min(arr[i...j]) <= num
max(arr[i...j])表示子数组arr[i...j]中的最大值,min[arr[i...j])表示子数组arr[i...j]中的最小值。
输入
5 2
1 2 3 4 5
输出
12
【思路】
本题要求,所有满足数组内最大值-最小值<=num 的子数组数量
容易知道:
若区间arr[i,j]满足其最大值-最小值>num 那么j继续向右边移动一定仍然满足 最大值-最小值>num
并且:
若区间arr[i,j]满足其最大值-最小值<=num 其子区间一定仍然满足 最大值-最小值<=num
因此本题的思考策略是:
每次起点为i的子数组,若arr[i,j]满足要求,j++ 当arr[i,j]不满足时,break
同时移动i++ 滑动窗口左边移动=》下一步分析起点为i+1的子数组
初始化i , j=0
从i=0 开始 研究当前j是否满足子区间 <=num 若满足=》j++ 滑动窗口右边移动
若不满足:即a