滑动窗口的通用框架

滑动窗口的通用框架

/**
 *    ★☆  启发:
 * 分析一道题目或者归类一类题目:不能跳过每道题目中具体的题意条件限制
 * 要分析出该题目的特点,★ 就应该好好分析改题目的题意限制里暗藏了什么可能性
 */

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 需要的结果变量;
//       }
//}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder-coco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值