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

龙岗企业网站制作公司青岛软件开发公司有哪些

龙岗企业网站制作公司,青岛软件开发公司有哪些,dede 子网站,广告设计公司简介文案目录 题目描述 题解 思路分析 暴力枚举代码 滑动窗口代码 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条…

目录

题目描述

题解

思路分析

暴力枚举代码

滑动窗口代码


题目描述

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

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

示例:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
输入:target = 4, nums = [1,4,4]
输出:1

题解

思路分析

题目要求我们找到和 >= target 最小连续 的子数组,我们很容易想到暴力枚举的方法,即访问数组的每一个元素i,并将i作为第一个元素,向后寻找

暴力枚举代码

class Solution {public int minSubArrayLen(int target, int[] nums) {int count = 0;for(int i = 0; i < nums.length; i++){int sum = 0;//向后遍历找到以nums[i]为起始元素的最小数组for(int j = i; j < nums.length;j++){sum += nums[j];if(sum >= target){//更新目标值 由于count的初始值为0,因此需要更新初始值,//否则最小值恒为0if(count > j-i+1 || count == 0){count = j-i+1;}break;}}}//若count未被更新,则返回0,即没有子数组的和大于target,//若count被跟新,则返回最小的子数组长度return count;}
}

 

此时我们通过遍历访问了数组的每个元素,在访问每个元素时,以该元素为起始元素,并向后寻找其最小长度的子数组,因此时间复制度为O(^{_N{2}})

而,题目所给的数组中所有元素均是正整数,因此每加上一个元素,子数组的和 sum 增加,通过这个特性,我们可以想到使用滑动窗口来解决这个问题

什么是滑动窗口?

滑动窗口是一种基于双指针的思想,两个指针指向的元素之间形成了一个窗口

因此滑动窗口是通过两个指针来维护的,那么如何移动这两个指针,是使用滑动窗口解决问题的关键

 初始时,两个指针都指向0下标位置

遍历元素,若条件不满足,则将right指针向右移动,直到条件满足为止

条件满足时,则保持右指针不变,开始移动左指针 left

在向窗口中添加新元素或从窗口中删除旧元素时,可能会更新一些与窗口范围有关的数据(例如,本题就需要更新最小子数组的长度)

如何使用滑动窗口解决本题? 

(1)我们定义两个指针left right,并让其都指向数组首元素

 

(2)此时窗口内只有 2 这一个元素,不满足和 sum >= target,因此将right向右移动,将新的元素加入窗口中,并判断此时子数组的和 sum 是否大于等于target,若满足,则不再移动right

(3)在sum >= target时,首先判断最小的子数组长度是否需要更新,并保持right不变,向右移动左指针left,删除旧的元素,直到sum < target

(4)循环(2)(3),直到right遍历完数组

为什么可以使用滑动窗口解决本题?
 

因为我们要找的子数组是连续的,且数组中的元素都为正整数,即子数组中增加一个元素,子数组中的元素和sum增加,从窗口中删除一个元素,sum减小,因此我们可以通过改变子数组的两端元素来更新数组,因此可以使用滑动窗口来解决本题

由于左右指针都只遍历了一遍数组,因此时间复杂度O(N)

滑动窗口代码

class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0;int right = 0;int sum = nums[0];int len = nums.length;int count = 0;while(left <= right && right < len){//小于目标值,向右移动右指针rightwhile(left <= right && right < len && sum < target){right++;if(right == len){break;}sum += nums[right];}//大于等于目标值while(left <= right && sum >= target){//更新目标值 由于count的初始值为0,因此需要更新初始值,否则最小值恒为0if((right - left) < count || count == 0){count = right - left + 1;}//左边值出窗口,left向右移动sum -= nums[left];left++;}}//若count未被更新,则返回0,即没有子数组的和大于target,//若count被跟新,则返回最小的子数组长度return count;}
}

题目来自:

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

http://www.yayakq.cn/news/423009/

相关文章:

  • 网站与网站链接怎么做网页转应用app
  • 企业如何申请网站北京官网建设公司
  • 电商网站毕业设计论文php mysql网站开发
  • 新手怎么做企业网站九江建网站的公司
  • 打工网站校企合作建设吉安哪里做网站
  • 申请域网站南昌网站搜索排名
  • 哪里学网站开发好龙华网站建设专业定制企业
  • 网站模板加盟代理十大景观设计公司排名
  • wordpress 淘宝客网站模板网站的建设ppt
  • 定制网站和模板网站的区别网站建设中ftp起什么作用
  • 制作手机端网站设计公司做网站价格
  • 网站开发最快的语言开发银行助学贷款系统登录官网
  • 社区网站推广方案主机屋 建网站教程
  • 淘宝联盟怎么做网站推广软件商城官方下载
  • 怎样在工商局网站做申请登记应用之星制作app软件官网
  • 在线做视频的网站常见的网页布局有几种方式
  • 上海专业网站建设维护有名的装修公司都有哪些
  • 南通网站建设企业外贸网站平台哪个好
  • jsp网站源码 怎么用做美食类网站分析
  • 网站建设新闻中心免费的h5制作软件app
  • wordpress导出网站wordpress拖拽
  • 服务态度 专业的网站建设营销型网站建设php源码
  • 大庆建设公司网站桂林网页制作
  • 怎样建公司网站汕尾东莞网站建设
  • 驻马店网站建设价格京东网上商城下载
  • 欧美电影免费网站网站域名哪里买
  • 网站后台怎么做alt标签网络规划设计师工作
  • 局域网网站域名怎么做wordpress 7牛
  • 网站公司一站式服务微信怎样开通公众号
  • 青岛即墨网站建设设计网站建设的技术风险