当前位置:   article > 正文

滑动窗口Java_滑动窗口算法java

滑动窗口算法java

 

目录

思路:

总结

模板

 例题


当你看到最长,最短,xxx次数,包含xxx字符串等类似问题都可以想到滑动窗口来解答

思路:

当求最大路径时

1、首先,Max为0,右指针向右滑动,找到一个红球,然后因为找最优解,继续向右,然后遇到一个白球,此时就不是连续红球了,所以左窗口要进行收缩,向左两步;

 2、然后右窗口继续向右滑动直至有了白球,有了白球后,左窗口向右收缩

 3、然后右窗口向右滑动,又是一个白球,所以左窗口进行收缩;

 4、最后右窗口继续向右找到了四个红球,然后向右看还有没有更优解,结果遇到白球,

 5、此时左窗口向右进行收缩.....

直至右窗口遍历完毕,到达最后位置;

注意:每次右滑动记得最优值 


当求最短时(更靠近target):

1.右指针先走,知道找到满足条件的地方,记录值

2、为了最优解,然后左指针向右收缩,看有没有更短的;

3、当左指针收缩,出现小于target时,右指针向右走看直至>=target

4、右指针导致value>target时,左指针收缩;

在数组末尾时结束 

总结

模板

 例题

 

  1. package 滑动窗口;
  2. /**
  3. * @author diao 2022/3/19
  4. */
  5. public class 寻找满足值的最小序列长度 {
  6. public static void main(String[] args) {
  7. int[] nums={1,2,3,4,5,6};
  8. int i = find(nums, 5);
  9. System.out.println(i);
  10. }
  11. public static int find(int nums[],int target){
  12. //1.分析变量
  13. int left=0;
  14. int right=0;
  15. int cur_sum=0;
  16. int minLength=0;
  17. //2.进行遍历,寻找最短路径
  18. while(right<nums.length){
  19. cur_sum+=nums[right];
  20. //3.如果cur_sum>=target,需要while遍历,将左指针往右收缩并记录最短路径
  21. while(cur_sum>=target){
  22. //3.1因为值已经>=target,所以我们要记录最小路径
  23. if(right-left+1<minLength||minLength==0){
  24. minLength=right-left+1;
  25. }
  26. //因为left收缩,所以当前值cur_sum-nums[left]
  27. cur_sum=cur_sum-nums[left];
  28. //3.2左指针不断收缩,直至当前值小于target
  29. left++;
  30. }
  31. right++;
  32. }
  33. return minLength;
  34. }
  35. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/923743
推荐阅读
相关标签
  

闽ICP备14008679号