leetcode209最小子串

2024-06-19 13:58:33 浏览数 (1)

LC209

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl 1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

代码语言:javascript复制
 class Solution {
 public:
     int minSubArrayLen(int target, vector<int>& nums) {
         //定义两个下标当做一对同向双指针
         int left = 0, right = 0;
         int size = nums.size();
         int sum = 0;
         int len = 0, min_len = INT_MAX;
         //left在开头位置不动,先是right向后走
         for(right = 0; right < size; right  )
         {
             //将遍历到的值放进sum中
             sum  = nums[right];
             //当sum>=target时就不必再让right向后遍历
             while(sum >= target)
             {
                 //计算当时的长度
                 len = right - left   1;
                 //更新最小长度
                 min_len = min(len, min_len);
                 //sum达到target的值的时候就让sum减去left当前位置的值,然后让left向前一步
                 sum -= nums[left  ];
             }
         }
 ​
         return min_len == INT_MAX ? 0 : min_len;
     }
 };
 ​

0 人点赞