两种解法解决LCR 008. 长度最小的子数组【C++】

这篇具有很好参考价值的文章主要介绍了两种解法解决LCR 008. 长度最小的子数组【C++】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LCR 008. 长度最小的子数组

两种解法解决LCR 008. 长度最小的子数组【C++】,算法刷题经验,c++,开发语言
两种解法解决LCR 008. 长度最小的子数组【C++】,算法刷题经验,c++,开发语言

解法

暴力解法

//暴力解法:
//使用双for循环依次遍历数组,罗列出所有情况,然后判断
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        //  (min_length < j-i+1)因为下面进行比较的时候新长度更小才会进行更新,所以置为
        //  最大的值又不超出数组元素的最大取值
        int min_length = INT_MAX;
        int sum = 0;

        int size = nums.size();
        for(int i=0; i<size; i++)
        {
            sum=0;  //sum置零容易遗忘,切记
            for(int j=i; j<size; j++)
            {
                sum += nums[j];
                //依次相加,直到第一次sum大于target为止
                if(sum >= target)
                {
                    //取最小长度
                    min_length = (min_length < j-i+1) ? min_length : j-i+1;
                    break;  //当大于目标值以后,也就不需要继续比较了
                }
                
            }
        }

        //  如果min_length一次也没有用更新就返回零
        return min_length == INT_MAX ? 0 : min_length;
    }
};

滑动窗口(双指针法)

//  滑动窗口法
//  窗口的起始位置cur移动规则:当子数组之和sum大于target时,cur++并且记录此时子数组的长度
//  窗口的终点位置dest移动规则: 当子数组之和sum小于target时,dest++

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int dest = 0; //    指向窗口终点
        int cur = 0;//  指向窗口起点
        int size = nums.size();
        int sum = 0;
        int min_length = INT_MAX;
        
        //循环结束条件应当是dest遍历完数组并且窗口已经缩短到最小状态(这个放在二层循环里面更为合适)
        while(dest < size)
        {
            sum+=nums[dest];

            //一种情况就是sum>=target,此时并不能直接结束缩短窗口,min_length
            //还可能更小,所以再套一层循环
            while(sum >= target)
            {
                min_length = dest-cur+1 < min_length ? dest-cur+1 : min_length;

                //窗口缩短一次,sum也一定要更新
                sum -= nums[cur];
                cur++;
            }
            dest++;
        }

        return min_length == INT_MAX ? 0 : min_length;
    }
};

😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄文章来源地址https://www.toymoban.com/news/detail-729213.html

到了这里,关于两种解法解决LCR 008. 长度最小的子数组【C++】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【滑动窗口】209. 长度最小的子数组

    滑动窗口 设置前后指针 滑动窗口内的元素之和总是大于或者等于s 滑动窗口的起始位置: 如果窗口的值大于等于s 窗口向前移动 窗口结束位置:for循环的j

    2024年02月13日
    浏览(39)
  • leetcode-209.长度最小的子数组

    代码

    2024年02月13日
    浏览(43)
  • 长度最小的子数组(Java详解)

    目录 题目描述 题解 思路分析 暴力枚举代码 滑动窗口代码 给定一个含有  n   个正整数的数组和一个正整数  target  。 找出该数组中满足其和   ≥ target   的长度最小的  连续子数组   [numsl, numsl+1, ..., numsr-1, numsr]  ,并返回其长度 。 如果不存在符合条件的子数组,返回

    2024年02月05日
    浏览(34)
  • 【LeetCode209】 长度最小的子数组

    滑动窗口型双指针 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出

    2024年01月23日
    浏览(49)
  • 滑动窗口实例1(长度最小的子数组)

    给定一个含有  n   个正整数的数组和一个正整数  target  。 找出该数组中满足其和   ≥ target   的长度最小的  连续子数组   [numsl, numsl+1, ..., numsr-1, numsr]  ,并返回其长度 。 如果不存在符合条件的子数组,返回  0  。 示例 1: 示例 2: 示例 3: 提示: 1 = target = 109 1 =

    2024年02月11日
    浏览(33)
  • 「优选算法刷题」:长度最小的子数组

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

    2024年01月23日
    浏览(37)
  • ( 数组) 209. 长度最小的子数组——【Leetcode每日一题】

    难度:中等 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数

    2024年02月06日
    浏览(39)
  • Leetcode刷题详解——长度最小的子数组

    给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。 示例 1: 示例 2: 示例 3: 提示: 1 = target = 109 1 = nums.length

    2024年02月07日
    浏览(49)
  • 有序数组的平方 长度最小的子数组 螺旋矩阵II

    977. 有序数组的平方 - 力扣(LeetCode) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100] 示例

    2024年02月12日
    浏览(44)
  • 【算法专题突破】滑动窗口 - 长度最小的子数组(9)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:209. 长度最小的子数组 - 力扣(Leetcode)  要注意的是,题目给的是正整数, 而题目要求并不难理解,就是找最短的子数组。 如果使用暴力的话,就是一个O(N3)的算法,复杂度很高, 我们可以用滑动窗口来做,

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包