题解 | #牛群保卫战#

牛群保卫战

https://www.nowcoder.com/practice/c836930db162418f87874ac5ba84726b

考察的知识点:双指针、滑动窗口;

解答方法分析:

  1. 定义两个指针 left 和 right,初始时都指向数组的第一个元素。
  2. 定义变量 sum 用于记录当前窗口内元素的和,初始化为 0。
  3. 完成以下操作直到 right 指针遍历完整个数组:将 nums[right] 加入到 sum 中。如果 sum 大于等于 target,则说明当前窗口内的元素和满足条件,计算当前窗口的长度(right - left + 1),并将它与当前最小长度进行比较,更新最小长度。将 left 指针向右移动一位,并将 nums[left] 从 sum 中减去。继续移动 right 指针,重复上述步骤。
  4. 如果最小长度仍然为初始值,说明没有满足条件的连续牛群,返回 0;否则返回最小长度。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param target int整型
     * @param nums int整型vector
     * @return int整型
     */
    int findMinSubarrayLength(int target, vector<int>& nums) {
        int n = nums.size();
        int left = 0;
        int right = 0;
        int sum = 0;
        int minLen = INT_MAX;
        while (right < n) {
            sum += nums[right];

            while (sum >= target) {
                minLen = min(minLen, right - left + 1);
                sum -= nums[left];
                left++;
            }

            right++;
        }
        return minLen == INT_MAX ? 0 : minLen;
    }
};

全部评论

相关推荐

09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务