【力扣】前缀和/滑动窗口:209. 长度最小的子数组

news2024/11/19 16:31:50

【力扣】前缀和/滑动窗口:209. 长度最小的子数组

文章目录

  • 【力扣】前缀和/滑动窗口:209. 长度最小的子数组
    • 1. 问题
    • 2. 题解
      • 2.1 暴力法
      • 2.2 前缀和 + 二分查找
      • 2.3 滑动窗口
    • 参考

1. 问题

给定一个含有 n 个正整数的数组和一个正整数 target 。

  • 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [ n u m s l , n u m s l + 1 , . . . , n u m s r − 1 , n u m s r ] [nums_l, nums_{l+1}, ..., nums_{r-1}, nums_r] [numsl,numsl+1,...,numsr1,numsr],并返回其长度。
  • 如果不存在符合条件的子数组,返回 0 。
    在这里插入图片描述

2. 题解

2.1 暴力法

  • 二重循环,每一个区间都遍历一遍。
class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int n = nums.size();
        if (n == 0) {
            return 0;
        }
        int ans = 100001;
        for (int i = 0; i < n; i++) {
            int sum = 0;
            for (int j = i; j < n; j++) {
                sum += nums[j];
                if (sum >= s) {
                    ans = min(ans, j - i + 1);
                    break;
                }
            }
        }
        return ans == 100001 ? 0 : ans;
    }
};
  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( 1 ) O(1) O(1)

2.2 前缀和 + 二分查找

  • 暴力法确定每个子数组的开始下标后,找到长度最小的子数组需要 O(n) 的时间。如果使用二分查找,则可以将时间优化到 O(logn)。
  • 使用二分查找,需要额外创建一个数组 sums 用于存储数组 nums 的前缀和。
class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int n = nums.size();
        if (n == 0) {
            return 0;
        }
        int ans = 100001;
        vector<int> sums(n + 1, 0); 
        for (int i = 1; i <= n; i++) {
            sums[i] = sums[i - 1] + nums[i - 1];
        }
        for (int i = 1; i <= n; i++) {
            int target = s + sums[i - 1];
            auto bound = lower_bound(sums.begin(), sums.end(), target);
            if (bound != sums.end()) {
                ans = min(ans, static_cast<int>((bound - sums.begin()) - (i - 1)));
            }
        }
        return ans == 100001 ? 0 : ans;
    }
};
  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
  • 空间复杂度: O ( n ) O(n) O(n)

2.3 滑动窗口

  • 定义两个指针分别表示子数组(滑动窗口窗口)的开始位置和结束位置。
class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int n = nums.size();
        if (n == 0) {
            return 0;
        }
        int ans = 100001;
        int start = 0, end = 0;
        int sum = 0;
        while (end < n) {
            sum += nums[end];
            while (sum >= s) {
                ans = min(ans, end - start + 1);
                sum -= nums[start];
                start++;
            }
            end++;
        }
        return ans == 100001 ? 0 : ans;
    }
};
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

参考

【1】https://leetcode.cn/problems/minimum-size-subarray-sum
【2】https://leetcode.cn/problems/minimum-size-subarray-sum/solution/chang-du-zui-xiao-de-zi-shu-zu-by-leetcode-solutio/

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

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

相关文章

SRGAN图像超分重建算法Python实现(含数据集代码)

摘要&#xff1a;本文介绍深度学习的SRGAN图像超分重建算法&#xff0c;使用Python以及Pytorch框架实现&#xff0c;包含完整训练、测试代码&#xff0c;以及训练数据集文件。博文介绍图像超分算法的原理&#xff0c;包括生成对抗网络和SRGAN模型原理和实现的代码&#xff0c;同…

c++重载函数和虚函数(重写)为什么分别在编译和运行时候确定

函数调用的本质&#xff1a; 函数调用实际上是执行函数体中的代码函数体是内存中的一个代码段函数名代表改代码段的首地址&#xff0c;函数执行时就从这里开始 所以执行一个函数的时候&#xff0c;需要知道具体的函数地址&#xff0c;才能执行函数 重载、重写和隐藏的区别 …

大家想知道ai写作宝怎么样吗?

ai写作是指利用人工智能技术自动生成文章、报告、新闻等文本内容的过程。它可以实现大规模、高效率、低成本的文本创作&#xff0c;免去人工编写的繁琐过程&#xff0c;节约了很多时间和精力。目前在文学创作、新闻报道、广告文案、社交媒体内容创作等方面&#xff0c;ai写作都…

mysql中将多行数据合并成一行数据

mysql中将多行数据合并成一行数据 一个字段可能对应多条数据&#xff0c;用mysql实现将多行数据合并成一行数据 例如&#xff1a;一个活动id&#xff08;activeId&#xff09;对应多个模块名&#xff08;modelName&#xff09;,按照一般的sql语句&#xff1a; SELECT am.act…

英伟达,不止于GPU

光子盒研究院 2013年至2023年这十年&#xff0c;有一家公司的市值翻了115倍、一跃成为美国股市回报率最高的公司——这就是英伟达。 黄仁勋出生于中国台湾&#xff0c;四岁随父母移民美国。1984年大学毕业&#xff0c;获得俄勒冈州立大学和斯坦福大学工程学位。 1993年&#xf…

《九》TypeScript 中的内置工具

TypeScript 内置了很多类型工具&#xff0c;来辅助进行类型转换。 Partial<Type>&#xff1a; Partial<Type>&#xff1a;用于构造一个所有属性都为可选属性的类型。 interface IPerson {name: stringage: number }// personOptional 类型的所有属性都是可选的 …

C++11【二】

文章目录 一、lambda表达式二、线程库三、包装器四、绑定&#xff08;不常用&#xff09; 一、lambda表达式 如果待排序元素为数据集合中的元素和自定义类型&#xff0c;需要用户定义排序时的比较规则不同如下代码&#xff0c;但都可以使用sort方法&#xff0c; #include <…

前端Vue3使用Moment Timezone处理不同时区时间

文章目录 前言一、基本时间概念UTC &#xff0c; GMT本地时间 为了方便比较&#xff0c;图中黑色背景的是 中国&#xff08;China&#xff09;区电脑&#xff0c;白色主题背景的是美国&#xff08;US&#xff09;区电脑&#xff09;2023-06-27T14:00:00.000Z 二、实际案例表单填…

正确认识:DOTA-E[c(RGDyK)2],DOTA标记序列多肽,双环肽螯合物

试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; DOTA-E[c(RGDyK)2]为双环肽螯合物&#xff0c;DOTA标记序列多肽&#xff0c;螯合物前体多肽&#xff1a;放射性金属元素&#xff0c;例如&#xff1a; Cu、 Ga、 Lu、等可以通过与…

0基础入门---第四章---神经网络的学习

&#x1f31e;欢迎来到深度学习的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f64f;作者水平很有限&#xff0c;如果发现错误&#xff…

【突发小技巧】手动将jar包导入本地Maven仓库

1、下载jar包 以支付宝sdk为例&#xff1a;https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java/4.33.12.ALL 后面执行mvn install命令(也就是安装命令&#xff0c;生命周期&#xff1a;编译、测试、打包、安装)&#xff0c;也会参考这个依赖坐标&#xff1a; …

前端安全 - 保护你的应用免受攻击的关键

80. 前端安全 - 保护你的应用免受攻击的关键 作为前端工程师&#xff0c;我们不仅需要关注用户界面的设计和功能实现&#xff0c;还需要关注应用程序的安全性。前端安全是保护我们的应用程序免受恶意攻击和数据泄露的重要方面。本文将介绍前端安全的概念、常见的安全威胁以及一…

Linux集群服务器上运行命令的4个实用工具

目录 1. PSSH-Parallel SSH 安装parallel-ssh&#xff0c; 使用 2. Pdsh-并行远程Shell实用程序 3. ClusterSSH 安装 4. Ansible 我们假设你已经设置好了SSH以便访问所有服务器;其次假设&#xff0c;同时访问多台服务器时&#xff0c;在所有Linux服务器上设置基于密钥的无…

clone浅拷贝

通过一个实例对象 生成另一个对象&#xff0c;称为 拷贝。 需要 实现 java.lang.Cloneable 该接口是一个 标记接口 通过调用 clone() 方法&#xff0c;完成 对象拷贝。该方法是Object类中的方法&#xff0c;所有对象都继承该方法。 clone()方法是 浅拷贝&#xff0c;也就是 只…

Vue+vite创建项目关于vite.config.js文件的配置

Vuevite创建项目关于vite.config.js文件的配置 Vue项目创建时&#xff0c;我们见过vue-cli 创建项目和webpack 创建项目等方式。 现在Vue 3版本使用npm/pnpm create vuelatest 创建项目&#xff0c;是搭配使用vite工具构建的。 创建完成的项目&#xff0c;最明显的去别就是&am…

【硬件自动化软件设计及实现】如何设计并实现!

今天来聊聊关于硬件方向的自动化软件设计及实现,后面我会用实例来让我们更加深入的了解硬件自动化,首先开发工具选择的是python语言,为啥选择python语言呢,因为他的语法比较简洁,外置库非常多,反正就是对于做自动化方面很实用就对了。 1.硬件自动化测试大致分为三个阶段实…

Redis 来了,Navicat 用户炸开了锅 | 文末附免单王获奖名单

近期&#xff0c;Navicat 的后台热闹无比&#xff01;自 2023 年 5 月 Navicat Premium 16.2 Beta 中文版上线以来&#xff0c;童鞋们的留言如潮水般涌来。6 月中旬&#xff0c;我们正式发布了 Navicat Premium 16.2 与 Navicat for Redis&#xff0c;赋予了Navicat 更卓越的功…

JMeter工具接口性能压力测试分析与优化

目录 前言&#xff1a; 一、具体测试结果如下&#xff1a; 二、初始应用配置调整&#xff1a; 三、分析解决过程&#xff1a; 总结&#xff1a; 前言&#xff1a; 最近公司做的项目&#xff0c;要求对相关接口做性能压力测试&#xff0c;在这里记录一下分析解决过程。 压…

[Pytorch]导数与求导

文章目录 导数与求导一. 标量 向量 矩阵 的导数二.Pytorch中的反向求导.backward()三.非标量求导 导数与求导 一. 标量 向量 矩阵 的导数 标量&#xff0c;向量&#xff0c;矩阵间求导后的形状&#xff1a; y\x标量x(1)向量 x(n,1)矩阵 X(n,k)标量y(1)(1)(1,n)(k,n)向量 y(m…

Unity Image/GL实现一个框选功能吧

场景准备 准备一张框选背景图 导入到unity之后&#xff0c;修改 Texture Type 为 Sprite&#xff0c;&#xff08;根据图片需要&#xff09;在 Sprite Editor 中 编辑 九宫格格式。图片样式的不一致&#xff0c;设置的九宫格格式也不一致。本例中虚线部分需要等距离平铺&…