当前位置: 首页 > wzjs >正文

固镇网站建设哪家好?把织梦改成字段式网站

固镇网站建设哪家好?,把织梦改成字段式网站,设计图片制作软件免费,wordpress 获取分类下的文章代码随想录 第一章 数组 209.长度最小的子数组 题目: 209.长度最小的子数组 题目描述: 给定一个含有 n​ 个正整数的数组和一个正整数 target​ 。 找出该数组中满足其总和大于等于target​ 的长度最小的 子数组 [numsₗ, numsₗ₊₁, ..., numsᵣ₋₁,…

代码随想录 第一章 数组 209.长度最小的子数组

题目: 209.长度最小的子数组

  • 题目描述:

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

    找出该数组中满足其总和大于等于target​ 的长度最小的 子数组 [numsₗ, numsₗ₊₁, ..., numsᵣ₋₁, numsᵣ]​ ,并返回其长度 如果不存在符合条件的子数组,返回 0​ 。

一、思想

滑动窗口的核心思想是就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果

在本题中实现滑动窗口,主要确定如下三点:

  • 窗口内是什么?
  • 如何移动窗口的起始位置?
  • 如何移动窗口的结束位置?

窗口就是 满足其和 ≥ target​ 的长度最小的 连续 子数组。

窗口的起始位置如何移动:如果当前窗口的值大于等于target​了,窗口就要向前移动了(也就是该缩小了)。

窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。

解题的关键在于窗口的起始位置如何移动。

滑动窗口算法详解(示例:nums=[2,3,1,2,4,3]​, target=7​)

右指针当前元素窗口范围累计和是否触发收缩操作记录最小长度左指针位置变化轨迹
02[0,0]2右移 →0 → 0
13[0,1]5右移 →0 → 0
21[0,2]6右移 →0 → 0
32[0,3]8① 长度=4 → subLength=4
sum-=2​ → sum=6
③ 左指针移动 →left=1
40 → 1
44[1,4]10① 长度=4 → 不更新
sum-=3 ​→ sum=7
③ 左移 → left=2
再次检测 → 长度=3 → subLength=3
sum-=1​ → sum=6
⑥ 左指针移动→ left=3
31 → 3
53[3,5]9① 长度=3 → 不更新
sum-=2​ → sum=7
③ 左移 → left=4
再次检测 → 长度=2 → subLength=2
sum-=4​ → sum=3
⑥ 左指针移动→ left=5
23 → 5

二、代码

/*** 类Solution:解决问题*/
class Solution
{
public:/*** 函数minSubArrayLen:寻找最短的子数组,其和至少为target* @param target 目标和* @param nums 整数数组* @return 返回最短子数组的长度,如果不存在满足条件的子数组,返回0*/int minSubArrayLen(int target, vector<int> &nums){// 初始化结果为最大整数int result = INT_MAX;// 初始化当前和为0int sum = 0;// 初始化子数组的起始位置为0int i = 0;// 初始化子数组的长度为0int subLength = 0;// 遍历数组for (int j = 0; j < nums.size(); j++){// 更新当前和sum += nums[j];// 当当前和大于等于目标和时while (sum >= target){// 更新子数组的长度subLength = j - i + 1;// 更新结果为当前结果和子数组长度的最小值result = result < subLength ? result : subLength;// 更新当前和sum -= nums[i++];}}// 如果结果仍为最大整数,返回0,否则返回结果return result == INT_MAX ? 0 : result;}
};

三、解析

1. 算法工作原理分解

1.1 初始化阶段

  • 核心变量定义

    int result = INT_MAX;  // 最小长度记录器(初始设为极大值)
    int sum = 0;           // 窗口和累计器
    int i = 0;             // 左指针(窗口起始位置)
    
  • 初始状态

    • 窗口范围:[0, 0)​(空窗口)
    • 示例:nums=[2,3,1,2,4,3]​ 初始时 sum=0

1.2 右指针主导窗口扩展

  • 遍历机制

    for(int j=0; j<nums.size(); j++) {  // j为右指针sum += nums[j];                 // 动态扩展窗口右边界
    
  • 操作特点

    • 右指针 j​ 单向前进(从0到n-1)
    • 每次扩展必然添加新元素到窗口
    • 示例:当 j=3​ 时,窗口扩展为 [2,3,1,2]

1.3 收缩条件检测

  • 触发条件

    while(sum >= target) {  // 必须用while循环
    
  • 检测逻辑

    • 当窗口和 sum​ ≥ target​ 时进入收缩阶段
    • 示例:j=3​ 时 sum=8 ≥7​ 触发收缩

1.4 窗口收缩与最小长度更新

  • 收缩操作流程

    1. 计算当前窗口长度

      subLength = j - i + 1;  // 闭区间长度计算
      
    2. 更新最小长度

      result = min(result, subLength);  // 取历史最小值
      
    3. 左指针右移

      sum -= nums[i++];  // 先减元素值,再移动左指针
      
  • 操作示例

    • 当窗口为 [2,3,1,2]​ 时:

      • 计算长度 4​ → 更新 result=4
      • 收缩后窗口变为 [3,1,2]​,sum=6

1.5 连续收缩机制

  • 多轮收缩场景

    while(sum >= target) {  // 可能执行多次收缩// 上述收缩操作
    }
    
  • 必要性

    • 确保找到以当前右指针为终点的最小窗口

    • 示例:当 j=4​ 时窗口 [1,4]​ 需连续收缩两次

      • 第一轮收缩:窗口 [2,4]​,sum=7
      • 第二轮收缩:窗口 [3,4]​,sum=6​(退出循环)

1.6 最终结果处理

  • 无效结果判断

    return (result == INT_MAX) ? 0 : result;
    
  • 逻辑意义

    • 若从未找到有效窗口(result​未更新),返回0
    • 示例最终结果:result=2​(窗口 [4,3]​)
2. 关键点说明
操作阶段时间复杂度保障机制示例中的操作表现
右指针扩展单层for​循环 → O(n)右指针完整遍历数组(6次移动)
左指针收缩每个元素最多被左指针访问一次 → O(n)左指针共移动4次(0→1→2→3→5)
窗口计算即时更新result​ → O(1) 操作3次有效更新(4→3→2)
循环检测while​确保完全收缩 → 无遗漏步骤5中触发两次连续收缩

四、复杂度分析

  • 时间复杂度O(n)
    滑动窗口的 左指针 left和右指针 right均单向移动,每个元素最多被访问两次(右指针扩展时访问一次,左指针收缩时访问一次)。对于长度为 n​ 的数组,总操作次数为 2n​ 次,最终时间复杂度为线性级别。
  • 空间复杂度O(1)
    仅使用固定数量的额外空间(sum​、left​、result​ 等整型变量),空间消耗与输入规模 n​ 无关。


文章转载自:

http://Aj2Gpwoy.rfmzs.cn
http://qRbEXtCI.rfmzs.cn
http://P4Dx0dRB.rfmzs.cn
http://uBrRSbfR.rfmzs.cn
http://ZfR4lNkM.rfmzs.cn
http://knT2Khuy.rfmzs.cn
http://4fR7Uhph.rfmzs.cn
http://EXCOQB22.rfmzs.cn
http://Q7npCsOD.rfmzs.cn
http://qCBKm5e3.rfmzs.cn
http://z6lvSaJW.rfmzs.cn
http://YCH4cesV.rfmzs.cn
http://Le0TQTJQ.rfmzs.cn
http://xTc9speU.rfmzs.cn
http://8HTEVSlE.rfmzs.cn
http://amzM5BYf.rfmzs.cn
http://xQnhqPFf.rfmzs.cn
http://k0Ivqoz7.rfmzs.cn
http://9p9McIvL.rfmzs.cn
http://o9ZJcGpJ.rfmzs.cn
http://S029sooc.rfmzs.cn
http://5wKMM4y2.rfmzs.cn
http://BXPDp2k9.rfmzs.cn
http://mm7XFG3X.rfmzs.cn
http://58UxBAfD.rfmzs.cn
http://2oKq4oK4.rfmzs.cn
http://y1j39LHm.rfmzs.cn
http://8T9NrbSR.rfmzs.cn
http://CXb8tHqq.rfmzs.cn
http://VTris4wW.rfmzs.cn
http://www.dtcms.com/wzjs/722573.html

相关文章:

  • 韶关营销型网站建设wordpress 分割线
  • 英文购物网站模板下载云南专业建网站
  • 成都网站建设 致尚兰州软件开发公司
  • 什么是网站框架结构安康网站建设公司报价
  • 专门做app的原型网站wordpress女性主题
  • 网站备案后应该做什么王野天个人简介
  • 网站营销定义seo网站优化培训
  • 建设信用卡在网站挂失块吗什么叫定制网站
  • 互联网上班是干嘛的seo智能优化系统
  • 义乌有什么企业网站吗动态域名做网站
  • 广播电视网站建设建设厅网站
  • 汕头做网站的公司中国制造网官网下载
  • 简洁物流网站模板铜仁搜狗推广
  • 张家港网站建设做网站的客户在哪找
  • 有关建筑的网站制作人漫画
  • 网站模版库工贸一体化企业建设电子商务网站的误区
  • 网站上的高清图怎么做上海网站开发与设
  • 内部网站建设要求四川省建设厅安全员报名网站
  • 品牌创意网站建设徕卡e常州公诚建设项目管理有限公司官方网站
  • 购物网站开发环境怎么做几个版面的网站
  • 深圳网络营销网站建设网站建设收费
  • 临沂做网站哪家好做网站都有跳转链接
  • 鲜花销售网站模板wordpress显示注册ip
  • 做照片书的模板下载网站好建设网站公司哪里好
  • 宁夏建设职业技术学院成绩查询网站宿迁沭阳网站建设
  • 怎么做汽车网站网站的建设任务
  • 门户网站建设 总结英文网站建设 招标
  • 用html5做网站的心得体会模具外贸营销网站如何做
  • 咋制作网站扫码点餐小程序
  • 小说网站上的广告在哪做台州seo优化