📑 题目:209. 长度最小的子数组

🚀 本题 LeetCode 传送门

题目大意

给定一个整型数组和一个数字 s,找到数组中最短的一个连续子数组,使得连续子数组的数字之和 sum>=s,返回最短的连续子数组的返回值。

解题思路

这一题的解题思路是用滑动窗口。在滑动窗口 [i,j]之间不断往后移动,如果总和小于 s,就扩大右边界 j,不断加入右边的值,直到 sum > s,之和再缩小 i 的左边界,不断缩小直到 sum < s,这时候右边界又可以往右移动。以此类推。

代码

  1. package leetcode
  2. func minSubArrayLen(target int, nums []int) int {
  3. left, sum, res := 0, 0, len(nums)+1
  4. for right, v := range nums {
  5. sum += v
  6. for sum >= target {
  7. res = min(res, right-left+1)
  8. sum -= nums[left]
  9. left++
  10. }
  11. }
  12. if res == len(nums)+1 {
  13. return 0
  14. }
  15. return res
  16. }
  17. func min(a int, b int) int {
  18. if a > b {
  19. return b
  20. }
  21. return a
  22. }