当前位置:   article > 正文

004. 滑动窗口——长度最小的子数组

004. 滑动窗口——长度最小的子数组

滑动窗口:滑动窗口值小于目标值,窗口右端移动,滑动窗口值大于目标值,窗口左端移动。

  1. class Solution {
  2. public int minSubArrayLen(int target, int[] nums) {
  3. // 滑动窗口左端
  4. int left = 0;
  5. // 滑动窗口右端
  6. int right = 0;
  7. // 滑动窗口数值之和
  8. int sum = 0;
  9. // 子数组的最小长度
  10. int minLen = Integer.MAX_VALUE;
  11. int len = nums.length;
  12. // 滑动窗口右端不得超过数组长度
  13. while (right<len) {
  14. sum = sum + nums[right];
  15. // 滑动窗口和大于目标值时
  16. while (sum>=target) {
  17. // 注意:先计算子数组长度再将滑动窗口左端左移,否则存在边界问题:15 [1,2,3,4,5]
  18. if (sum >= target) {
  19. minLen = Math.min(minLen, right-left+1);
  20. }
  21. sum = sum - nums[left++];
  22. }
  23. // 每次循环滑动窗口右端右移一位
  24. right++;
  25. }
  26. if (minLen == Integer.MAX_VALUE) {
  27. return 0;
  28. }
  29. return minLen;
  30. }
  31. }

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

闽ICP备14008679号