209. 长度最小的子数组

209. 长度最小的子数组

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • __209长度最小的子数组_nlogn_n
    • __209长度最小的子数组_n_1

原题链接:

209. 长度最小的子数组

https://leetcode.cn/problems/minimum-size-subarray-sum/submissions/

完成情况:

在这里插入图片描述

解题思路:

//找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组

	 1 <= target <= 1091 <= nums.length <= 1051 <= nums[i] <= 105如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

定义两个指针 start\textit{start}start 和 end\textit{end}end 分别表示子数组(滑动窗口窗口)的开始位置和结束位置,维护变量 sum\textit{sum}sum 存储子数组中的元素和(即从 nums[start]\text{nums}[\textit{start}]nums[start] 到 nums[end]\text{nums}[\textit{end}]nums[end] 的元素和)。

初始状态下,start\textit{start}start 和 end\textit{end}end 都指向下标 000,sum\textit{sum}sum 的值为 000。

每一轮迭代,将 nums[end]\text{nums}[end]nums[end] 加到 sum\textit{sum}sum,如果 sum≥s\textit{sum} \ge ssum≥s,则更新子数组的最小长度(此时子数组的长度是 end−start+1\textit{end}-\textit{start}+1end−start+1),然后将 nums[start]\text{nums}[start]nums[start] 从 sum\textit{sum}sum 中减去并将 start\textit{start}start 右移,直到 sum<s\textit{sum} < ssum<s,在此过程中同样更新子数组的最小长度。在每一轮迭代的最后,将 end\textit{end}end 右移。

参考代码:

__209长度最小的子数组_nlogn_n

package 日常Java程序测试.代码随想录.数组;import java.util.Arrays;public class __209长度最小的子数组_nlogn_n {public int minSubArrayLen(int target, int[] nums) {//找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组/**1 <= target <= 1091 <= nums.length <= 1051 <= nums[i] <= 105如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。*/int n = nums.length;if (n == 0){return 0;}int res = Integer.MAX_VALUE;int sums [] = new int[n + 1];   //每一个都对应前面所有nums[]的和。for (int i = 1;i<=n;i++){sums[i] = sums[i - 1] + nums[i-1];}for (int i = 1;i<=n;i++){int tar = target + sums[i-1];   //每一个合,都加上targetint bound = Arrays.binarySearch(sums,tar);if (bound < 0){bound = -bound - 1;}if (bound <= n){res = Math.min(res,bound - (i-1));}}return res == Integer.MAX_VALUE ? 0 : res;}
}

__209长度最小的子数组_n_1

package 日常Java程序测试.代码随想录.数组;public class __209长度最小的子数组_n_1 {/**** @param target* @param nums* @return*/public int minSubArrayLen(int target, int[] nums) {int n = nums.length;if (n == 0){return 0;}int res = Integer.MAX_VALUE;int start = 0,end = 0;int sum = 0;while (end < n){sum += nums[end];while (sum >= target){res = Math.min(res,end - start + 1);sum -= nums[start];start++;}end++;}return res == Integer.MAX_VALUE ? 0 : res;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPHP 3.2 常用内置函数

ThinkPHP 3.2 内置函数CDM疑问&#xff1a; D与M方法的相同点与不同点IAR 内置函数 C C方法是用于获取或修改&#xff0c;系统配置参数 语法&#xff1a; 获取&#xff1a;C&#xff08;需要获得的配置参数Name&#xff09; $value C(config_name);设置&#xff1a;C&…

css flex实现同行div根据内容高度自适应且保持一致

有情况如下&#xff1a;三个div的高度是随着内容自适应的&#xff0c;但希望每列的高度都相同&#xff0c;即&#xff0c;都与最高的相同。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewp…

在线存储系统源码 网盘网站源码 云盘系统源码

Cloudreve云盘系统源码-支持本地储存和对象储存,界面美观 云盘系统安装教程 测试环境:PHP7.1 MYSQL5.6 Apache 上传源码到根目录 安装程序: 浏览器数据 http://localhost/CloudreveInstallerlocalhost更换成你的网址 安装完毕 记住系统默认的账号密码 温馨提示:如果默认…

Java方法区

方法区 Java方法区&#xff08;Method Area&#xff09;&#xff0c;在Java虚拟机&#xff08;JVM&#xff09;内存结构中是一个非常重要的组成部分。方法区是用来存储类信息、常量、静态变量以及即时编译器编译后的代码等数据的内存区域。 内部结构 类元数据&#xff08;Cl…

软件外包开发迭代管理工具

软件迭代的管理工具有助于团队有效地规划、跟踪和管理迭代开发过程&#xff0c;确保项目按时交付&#xff0c;并与团队成员之间进行协作。以下是一些常用的软件迭代管理工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#…

apache httpd 换行解析漏洞

原理 Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 漏洞编号 cve-2017-15715 环境…

基于斑马优化的BP神经网络(分类应用) - 附代码

基于斑马优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于斑马优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.斑马优化BP神经网络3.1 BP神经网络参数设置3.2 斑马算法应用 4.测试结果&#xff1a;5.M…

力扣每日一题54:螺旋矩阵

题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#…

复杂系统设计基本注意事项

目录 一、软件复杂性度量方法 &#xff08;一&#xff09;McCabe度量方法 &#xff08;二&#xff09;John Ousterhout度量方法 &#xff08;三&#xff09;一般建议 二、复杂性带来的危害 &#xff08;一&#xff09;修改扩散&#xff08;Modification Diffusion&#x…

【Servlet】实现Servlet程序

文章目录 1. 最朴素方式1. 创建项目2. 引入依赖3. 创建目录4. 编写代码5. 打包程序6. 部署程序7. 验证程序 2. 更方便方式1. 安装Smart TomCat插件2. 启动 1. 最朴素方式 1. 创建项目 选择Maven项目 2. 引入依赖 Maven项目创建完后会生成一个pom.xml文件&#xff0c;我们可…

反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )

1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术&#xff0c;此时集合的泛型将不能产生约束了&#xff0c;此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型&#xff0c;在 编译成Class文件进入 运行阶段 的时候&a…

【C++】VS2019,关于scanf等的报错及其解决方案

参考资料&#xff1a;B站袁春旭老师的网课 报错一&#xff1a;this function may be unsafe. Consider using scanf_s instead. 如下图 这种错误是因为SDL检查不通过&#xff0c;默认这个检查是开的&#xff0c;如下图&#xff0c; 解决方案&#xff1a;把这个SDL检查关闭即…

【吞噬星空】战神宫全体投票,为罗峰脱罪,徐欣补办婚礼,洪成功恢复脑电波

【侵权联系删除】【文/郑尔巴金】 吞噬星空动画第90集即将更新&#xff0c;官方相当给力&#xff0c;提前曝光了图文情报与先行预告。虽然罗峰与巴巴塔尚未正式开始闯荡宇宙&#xff0c;但却是斩杀阿特金三大巨头的平稳生活。不但有战神宫为罗峰脱罪&#xff0c;而且还给徐欣补…

算法进阶——数组中的逆序对

题目 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007 数据范围&#xff1a;对于 50% 的数据, size≤104 对…

STM32F4XX之串口

一、标准串口&#xff08;UART&#xff09;介绍 1、通信协议相关概念 1.1同步通信和异步通信 (1)同步通信&#xff1a;两个器件之间共用一个时钟线&#xff0c;要发送的数据在时钟的作用下一位一位发送出去。 &#xff08;2&#xff09;异步通信&#xff1a;指两个器件之间没…

C++入门——引用|内联函数|auto关键字|基于范围的for循环|指针空值

前言 C入门专栏是为了补充C的不足&#xff0c;并为后面学习类和对象打基础。在前面我们已经讲解了命名空间、输入输出、缺省参数、重载函数等&#xff0c;今天我们将完结C的入门。 下面开始我们的学习吧&#xff01; 一、引用 1、引用是什么呢&#xff1f;为什么C添加了引用&a…

kali安装nodejs、npm失败

更新apt-get再安装&#xff0c;更新时间比较久&#xff0c;看网速&#xff0c;中间有一些确认步骤 22 apt-get update23 apt-get upgrade24 apt-get install nodejs25 node26 npm27 apt-get install npm

第十届山东省大学生网络安全技能大赛【神秘的base】【小试牛刀】

神秘的base 题目描述 EvAzEwo6E9RO4qSAHq42E9KvEv5zHDt34GtdHGJaHD7NHG42bwd神奇密码&#xff1a; xbQTZqjN8ERuwlzVfUIrPkeHd******LK697o2pSsGDncgm3CBh/Xy1MF4JAWta解题思路 这个题&#xff0c;上午一直零解&#xff0c;后来放出了hint&#xff0c;提示了base64换表。 这…

新零售系统主要功能有哪些?新零售系统开发公司推荐

新零售系统是一套全面的数字化解决方案&#xff0c;旨在帮助实体零售店提升运营效率、优化用户体验并实现持续增长。以下是新零售系统的主要功能&#xff1a; l 用户画像&#xff1a;系统通过收集和分析顾客的行为、偏好、购买历史等数据&#xff0c;构建出完整的用户画像。这…

2023.10.19 关于设计模式 —— 单例模式

目录 引言 单例模式 饿汉模式 懒汉模式 懒汉模式线程安全问题 分析原因 引言 设计模式为编写代码的 约定 和 规范 阅读下面文章前建议点击下方链接明白 对象 和 类对象 对象和类对象 单例模式 单个实例&#xff08;对象&#xff09;在某些场景中有特定的类&#xff0c;…