★ 算法OJ题 ★ 力扣209 - 长度最小的子数组

news2024/9/22 19:41:23

Ciallo~(∠・ω< )⌒☆ ~ 今天,简将和大家一起做一道滑动窗口算法题--长度最小的子数组~

目录

一  题目

二  算法解析

解法⼀:暴力求解

解法二:滑动窗口

三  编写算法


一  题目

209. 长度最小的子数组 - 力扣(LeetCode)

二  算法解析

解法⼀:暴力求解

算法思路: 从前往后枚举数组中的任意⼀个元素,把它当成起始位置。然后从这个起始位置开始寻找⼀段最短的区间使得这段区间的和大于等于目标值。 将所有元素作为起始位置所得的结果中,找到最小值即可。(会超时)

class Solution {
public:
	int minSubArrayLen(int target, vector<int>& nums)
	{
		// 记录结果
		int ret = INT_MAX;
		int n = nums.size();
		// 枚举出所有满⾜和⼤于等于 target 的⼦数组[start, end]
		// 由于是取到最⼩,因此枚举的过程中要尽量让数组的⻓度最⼩
		// 枚举开始位置
		for (int start = 0; start < n; start++)
		{
			int sum = 0; // 记录从这个位置开始的连续数组的和
			// 寻找结束位置
			for (int end = start; end < n; end++)
			{
				sum += nums[end]; // 将当前位置加上

				if (sum >= target) // 当这段区间内的和满⾜条件时
				{
					// 更新结果,start 开头的最短区间已经找到
					ret = min(ret, end - start + 1);
					break;
				}
			}
		}
		// 返回最后结果
		return ret == INT_MAX ? 0 : ret;
	}
};

此方法可以通过以下两个优化,成为解法二:

解法二:滑动窗口

滑动窗口的好处

  • 利用单调性,使用“同向双指针”优化,规避了很多没有必要的枚举行为~

滑动窗口什么时候用呢?~

  • 单调性,有两个指针向同向移动且不回退时可以用~

滑动窗口怎么用呢?~

  • 定义两个指针,left = 0, right = 0;
  • 进窗口
  • 判断(循环)
  • 更新结果,出窗口

时间复杂度:虽然代码是两层循环,但是我们的 left 指针和 right 指针都是不回退的,两者最多都往后移动 n 次,任意一个指针到底就会结束。因此时间复杂度是 O(N)

三  编写算法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python Mail:如何设置SMTP服务器发邮件?

Python Mail发送邮件的步骤&#xff1f;如何使用Python 发邮件&#xff1f; 在现代通信中&#xff0c;电子邮件仍然是不可或缺的一部分。Python Mail 提供了一种简单而强大的方式来通过 SMTP 服务器发送邮件。AokSend将详细介绍如何使用 Python Mail 库来设置和发送电子邮件。…

echart自适应tree树图,结构组织图模板

处理数据(代码中有处理数据逻辑&#xff0c;可忽略&#xff0c;因为后端返回的格式不匹配&#xff0c;需要自己处理) [{ name: ‘test1’, children: [{ name: ‘test2’ }] }] <template><div class"boxEchart"><div ref"echart" :style&…

9.3javaweb总结

1.axios交互 发送数据到后端。 alert(注册成功&#xff08;数据正在发送后端&#xff09;!);// 获取表单数据//const formData new URLSearchParams(new FormData(document.getElementById("register-form"))).toString();const form document.getElementById(&q…

深度学习——基于MTCNN算法实现人脸侦测

这里写目录标题 先看效果 MTCNN主体思想级联网络图像金字塔IOU算法iou 公式 nms 算法数据生成celeba 数据代码训练代码侦测代码总结 先看效果 MTCNN 从2016年&#xff0c;MTCNN算法出来之后&#xff0c;属实在工业上火了一把&#xff0c;最近尝试着把论文代码复现了一下。 主…

小企业仓库管理升级:WMS助力智能化转型

WMS 在小型企业中的推进优势与必要性 WMS 是数字化工厂中不可或缺的系统之一&#xff0c;它不仅在大型企业中发挥着重要作用&#xff0c;对于小型企业同样具有巨大价值。通过引入 WMS&#xff0c;小型企业可以显著提高仓储管理效率&#xff0c;降低运营成本&#xff0c;支持业务…

vllm源码解析(二):调度策略分析

五 vllm调度逻辑 前面分享的知识确实遗漏了许多细节&#xff0c;不过不影响我们接下来的讲解&#xff0c;我们在第一篇文章中已经详细讲解过三个队列用途&#xff0c;不熟悉的同学可以回看。 本章涉及到的流程图已上传github: https://github.com/yblir/packages/blob/main/v…

力扣-968监控二叉树(Java贪心详细题解)

题目链接&#xff1a;968. 监控二叉树 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 本题是一道名副其实的hard题目&#xff0c;他考察二叉树和贪心的综合运用能力。 所以我们不仅要会贪心还要会二叉树的一些知识&#xff0c;如果没有写二叉树类型的题目&a…

实战项目-快速实战-springboot dataway

最后附项目源码, 开箱即用 访问地址 http://127.0.0.1:8101/interface-ui/#/ 效果图 具体怎么用, 大家还是看官网,中文文档 https://www.dataql.net/docs/dataway/ui/ui-list 项目结构 代码 DataWayApplication package com.zero.dataway;import net.hasor.spring.boot…

集合框架,List常用API,栈和队列初识

回顾 集合框架 两个重点——ArrayList和HashSet. Vector/ArraysList/LinkedList区别 VectorArraysListLinkedList底层实现数组数组链表线程安全安全不安全不安全增删效率较低较低高扩容*2*1.5-------- &#xff08;>>&#xff09;运算级最低&#xff0c;记得加括号。 常…

窖藏之秘:白酒在窖藏过程中经历了哪些变化?

在中华五千年的文明史中&#xff0c;白酒一直扮演着举足轻重的角色。它不仅是文人墨客笔下的灵感源泉&#xff0c;更是亲朋好友间传递情感的桥梁。在众多白酒品牌中&#xff0c;豪迈白酒&#xff08;HOMANLISM&#xff09;以其不同的酿造工艺和窖藏技艺&#xff0c;成为了酒中翘…

EasyExcel模板导出与公式计算(上)

目录 环境要求 功能预览 需求分析 源码跟踪 自定义数据处理器 ​总结 最近做项目时遇到这样一个需求&#xff0c;将数据库表的含有公式的信息导出为Excel文件并且需要计算其结果&#xff0c;由于上网查询资料后未能完美解决&#xff0c;故将此踩坑过程记录下来以供参考。…

Datawhale X 李宏毅苹果书 AI夏令营第五期 DL进阶方向 Task3笔记

Datawhale X 李宏毅苹果书 向李宏毅学深度学习&#xff08;进阶&#xff09; 是 Datawhale 2024 年 AI 夏令营第五期的学习活动&#xff08;“深度学习 进阶”方向&#xff09; 往期task1链接&#xff1a;深度学习进阶-Task1 往期task2链接&#xff1a;深度学习进阶-Task2 我做…

惠中科技RDS自清洁膜层:光伏领域的绿色革命

惠中科技RDS自清洁膜层&#xff1a;光伏领域的绿色革命 在全球能源转型和光伏产业蓬勃发展的背景下&#xff0c;光伏电站的运营维护面临着诸多挑战&#xff0c;其中灰尘污染问题尤为突出。灰尘的堆积不仅降低了光伏板的透光率&#xff0c;还直接影响了电站的发电效率和经济效益…

算法复盘——Leetcode hot100: 双指针算法

双指针算法 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 优化解法&#xff1a;用 left 和 right 两个指针从两端向中心收缩&#xff0c;一边收缩一边计算 [left, right] 之间的矩形面积&#xff0c;取最大的面积值即是答案。 其实是优化区间选择 直接丢弃体…

51单片机-串口通信(单片机和PC互发数据)

作者&#xff1a;Whappy 时间&#xff1a;2024.9.3 关于串口的疑问&#xff1f; 根据我的代码是不是初始化完成串口之后&#xff0c;只要我们使用串口发送数据就会触发中断&#xff1f; &#xff08;在文章下面&#xff09; ChatGPT said: ChatGPT 是的&#xff0c;根据…

IDEA项目启动在不同端口的方法,服务多端口启动

前言 在本地测试分布式事务以及分布式锁的过程中&#xff0c;在IDEA中多端口启动服务&#xff0c;可以高效方便开展测试调试工作。 开启流程 1.打开Edit Configurations 2.选中要复制的服务&#xff0c;点击复制小图标 3.配置启动端口号&#xff0c;点击保存 --server.port1…

解密Docker核心:深入理解Docker基础架构

随着云计算技术的普及&#xff0c;Docker容器技术在现代应用开发和部署中占据了重要地位。要充分理解Docker的优势与运用&#xff0c;深入掌握其基础架构是关键。本文将深入探讨Docker的核心组成部分及其在容器化平台中的角色和作用。 一、Docker的基础架构概述 Docker的基础…

leetcode 2816.翻倍以链表形式表示的数字

1.题目要求: 给你一个 非空 链表的头节点 head &#xff0c;表示一个不含前导零的非负数整数。将链表 翻倍 后&#xff0c;返回头节点 head 。2.题目代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ str…

AI建模——文/图生模型产品介绍与模型免费下载

说明&#xff1a; 记录AI文生3D模型、图生3D模型的相关产品&#xff1b;记录其性能、功能、收费与免费方法 1.AI建模产品 Robin MeshAnything Meshy 生成效果比较&#xff1a; 2. Rodin 官网&#xff1a;gHyperHuman 支持&#xff1a;文生模型、图生模型 模型生成与下载…

自动控制:模糊控制器的原理及设计

自动控制&#xff1a;模糊控制器的原理及设计 引言 随着控制技术的不断发展&#xff0c;模糊控制器&#xff08;Fuzzy Controller&#xff09;作为一种智能控制技术&#xff0c;广泛应用于许多复杂系统中。与传统的线性控制器不同&#xff0c;模糊控制器无需精确的数学模型&a…