【LeetCode滑动窗口算法】长度最小的子数组 难度:中等

 我们先看一下题目描述:f0b214303e814dccac0f546fce99a0bc.png

fd0d741ce3f64adc862e4c7df0bfdfc3.png

b72ad29be946429fa2fe0d6e18207610.png

解法一:暴力枚举

时间复杂度:o(n^3)

class Solution {
public:
	int minSubArrayLen(int target, vector<int>& nums)
	{
		int i = 0, j = 0;
		vector<int> v;
		for (;i < nums.size();i++)
		{
			int sum = nums[i];
			for (j = i + 1;j < nums.size();j++)
			{
				sum = sum + nums[j];
				if (target == sum)
				{
					v.push_back(j - i + 1);//j-i+1就是满足条件的子数组的长度
					break;
				}
			}
		}
		if (v.empty())
			return 0;
		else
           {
            sort(v.begin(), v.end());
			return v[0];
           }
	}
};

解法2:利用数组元素的单调性,滑动窗口(同向双指针)算法。

时间复杂度: o(n)

滑动窗口怎么用呢?

1、left=0,right=0

2、进窗口-->判断是否满足条件-->否-->进窗口

                                                      是-->更新结果-->出窗口-->更新结果

滑动窗口算法主要是利用数组元素之和的单调性,规避了很多没有必要的枚举行为。

下面是滑动窗口算法的演示:

bdc828de427d4a3293d884988888e5d0.pngc13020351f3d4829a2d1d7105dc0258a.png

db9663067ee24cf6a431839e0b454276.png 011bae627f5a4ddbb8f8ae530733dd53.png

3ec3649cc64642059686f75ea4c2e7ef.png af4ea62eb82e4383b127f9e36e36a21e.png

下面我们来实现一下基于滑动窗口算法的解题代码:

class Solution {
public:
	int minSubArrayLen(int target, vector<int>& nums)
	{
		int sum = 0, len = INT_MAX;
		for (int left = 0, right = 0;right < nums.size();right++)
		{
			sum += nums[right];//进入窗口
			while (sum >= target)//判断
			{
				len = min(len, right - left + 1);//更新结果
				sum -= nums[left++];//出窗口
			}
		}
		return len == INT_MAX ? 0 : len;
	}
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 05:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 05:00:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 05:00:02       82 阅读
  4. Python语言-面向对象

    2024-06-16 05:00:02       91 阅读

热门阅读

  1. 服务器硬件基础知识

    2024-06-16 05:00:02       31 阅读
  2. 13.零拷贝

    2024-06-16 05:00:02       31 阅读
  3. 【定义通讯数据类型】LCM搭建系统通讯

    2024-06-16 05:00:02       39 阅读
  4. Cesium4Unreal - # 011 加载显示geojson

    2024-06-16 05:00:02       35 阅读
  5. Spring Boot 项目中的 GC Root

    2024-06-16 05:00:02       32 阅读
  6. Docker常用命令

    2024-06-16 05:00:02       30 阅读
  7. mysql 分组后每个取最新的一条记录

    2024-06-16 05:00:02       28 阅读
  8. 常用的工具:pdf转换器、流程图

    2024-06-16 05:00:02       33 阅读
  9. Linux系统学习——指令二

    2024-06-16 05:00:02       31 阅读
  10. Python中的函数

    2024-06-16 05:00:02       31 阅读
  11. LoRa模块如何实现智能灌溉系统的精准灌溉

    2024-06-16 05:00:02       36 阅读
  12. LeeCode 1987 DP / Trie

    2024-06-16 05:00:02       32 阅读
  13. 无人机技术的原理和发展

    2024-06-16 05:00:02       28 阅读