/**
* ★☆ 启发:
* 分析一道题目或者归类一类题目:不能跳过每道题目中具体的题意条件限制
* 要分析出该题目的特点,★ 就应该好好分析改题目的题意限制里暗藏了什么可能性
*/
package 数组;
/**
* 特点:双指针,然后是同方向的
* @author Huangyujun
*
* 什么时候使用?(与子数组/字符串 有关的题目)
* 滑动窗口:是双指针的题目
找出一个数组中满足一定条件的子数组问题,字符串也可以看成数组。看到子数组问题,就是DP回溯滑动窗口这三种之一
*
*
*
* 滑动窗口的通用框架 1:(例题:209_长度最小的子数组)
* (做题特点 一:题目给定了具体的值target,但是是要求 >=target,此条件的可以得到的可能情况比较多 【例如题目 要求某种情况下>= target】,而大于target的可能情况就会比较多了
* ① 先移动右指针确定窗口的大致可能范围(在这大致可能范围里找到最优范围),然后暂时固定住右指针,
* ② 在满足条件(满足target下):不断的移动左指针,缩小窗口
* ③ 当不满足target了,又开始移动 右指针,然后。。。。。又确定下来窗口的大致可能范围(在这大致可能范围里找到最优范围),然后暂时固定住右指针,
* 特点2,形式上的特点(左右指针移动的方向):是一开始左右指针,同方法移动)
*
*/
//public class 滑动窗口的通用框架 1{
// public String slidingWindow(String s, String t) {
// // 起始的时候,都位于 0,同方向移动
// int left = 0;
// int right = 0;
// int sLen = s.length();
// while (right < sLen) {
// char c = s.charAt(right);
// right++;
// //对状态做修改
// while ( 满足某种条件 ) {
// //更新ans可能的地方之一
// char c1 = s.charAt(left);
// left++;
// //对状态做修改
// }
// //更新ans可能的地方之二
// }
// return 需要的结果变量;
// }
//}
/**
* * 滑动窗口的通用框架 2:(例题:57_和为s的连续正数序列)
* 做题特点 一:题目给定了具体的值target,这个target条件的可能弹性空间唯一了 【例如题目 要求某种情况下= target】,而等于target的可能情况在“暂时固定下的范围窗口中情况就是固定下该窗口呀”
* ① == target,这种直接通过判断找窗口范围,找到一个固定窗口范围后,移动左边指针(达到整体窗口向前移动)去找下一个固定窗口范围
* 这类题:直接 分:①== target,② < target , ③ > target 来找合适的固定窗口范围
*/
//public class 滑动窗口的通用框架 2{
// public String slidingWindow(int target) {
// // 起始的时候,同方向移动
// int left = 1;
// int right = 2;
// while (l < r) {
// 更新ans
// if( ans == target){
// //需要的结果,得到了一个
// l++;
// }else if(ans < target){ //比target小,右指针往前移动,扩大范围
// r++;
// }else{ //比target大,左指针往前移动,缩小范围
// l++;
// }
//
// }
// return 需要的结果变量;
// }
//}