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

asp网站开发培训网站老域名跳转到新域名

asp网站开发培训,网站老域名跳转到新域名,公司网站建设30元,德阳网站建设网站建设一.题目描述 长度最小的子数组 二.思路分析 题目要求:找出长度最小的符合要求的连续子数组,这个要求就是子数组的元素之和大于等于target。 如何确定一个连续的子数组?确定它的左右边界即可。如此一来,我们最先想到的就是暴力枚…

一.题目描述

长度最小的子数组

 二.思路分析

题目要求:找出长度最小的符合要求的连续子数组,这个要求就是子数组的元素之和大于等于target。

如何确定一个连续的子数组?确定它的左右边界即可。如此一来,我们最先想到的就是暴力枚举,枚举所有的子数组,找到符合要求的,比较出长度最短的那一个。

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int ret = INT_MAX;for (int left = 0; left < n; left++){int sum = 0;for (int right = left; right < n; right++){sum += nums[right];if (sum >= target){ret = min(ret, right - left + 1);}}}return ret == INT_MAX ? 0 : ret;}
};

两层for循环,时间复杂度O(n^2),leetcode上运行超时,我们需要想办法优化时间复杂度。

时间复杂度这么高就是因为做了大量的枚举,我们是否有办法减少一些不必要的枚举呢?

key1

以这个测试用例为例,当right从left位置一直向右移动到该位置,区间之和满足要求,记录此时的长度4并更新结果。

按照暴力枚举的策略right还要继续向后移动。但我们知道,后面的区间肯定也是满足条件的,因为所有的数都是正整数,sum只会越加越大。

即便如此,区间长度肯定也会更大,所以此时就是left固定在第一个位置的局部最优解,right不必再向后枚举了。

key2

left向右移动一个单位,按照暴力枚举策略,right要从图中的标记处回退到left位置 

但我们知道right最终还是会一直往前走,到达原先的标记处。为啥呢?通过上一轮枚举结果,我们已知[left - 1 , tmp)区间是不满足要求的,更别说现在还少了一个数。

所以right没有必要退回去,因为退了也是白退。

key3

所以left前进即可,right不用后退。怎么计算此时区间长度和呢?遍历一遍区间吗?那right岂不是还要回去?其实只需要在left移动之前用sum减去left指向的值即可,然后再移动left。

按照图中的实例,此时不满足条件,所以right继续向后移动,又回到了之前的逻辑。

如果此时满足条件呢?那么这个就是left固定在这个位置的局部最优解了,更新结果之后,left继续向右移动。

故left可能会向后移动多步,所以要用循环实现。

三.代码实现

在代码实现过程中,我们需要用到两个指针(下标)来标记左边界和右边界。通过分析,left和right只会向前移动而不会后退,就像一个窗口一样从左到右划过数组故形象的将这类方法称为滑动窗口,也叫同向双指针。当研究对象是一个连续区间时,并且证明left和right都不用后退时便可以考虑使用滑动窗口解题。

 滑动窗口类题目常见就这几个步骤,先定义两个指针,然后right指向的元素进窗口,判断条件,决定是否出窗口,有时可能需要出多个元素,所以此处可能是一个循环过程,例如本题就是。至于更新结果要根据具体的题目来确定位置,有可能是进窗口以后,又有可能是出窗口之前,还可能是出窗口之后。

整个过程是循环的,当right越界时也就结束了。

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

 最坏的情况就是right和left都走到了末尾,相当于两个指针都遍历一遍数组,时间复杂度为O(n)

 

http://www.yidumall.com/news/56353.html

相关文章:

  • wordpress清除无效计划任务性能优化工具
  • 怎么做网站站内搜索百度数字人内部运营心法曝光
  • 如何做wordpress文章页360搜索引擎优化
  • 智慧团建网站登录电脑版公司网站建设费
  • 廊坊网站制作官网百度一下百度搜索百度一下
  • 上海营销型网站互联网外包公司有哪些
  • 北京网站建设策划怎么创建网站快捷方式
  • 想做水果外卖怎么做网站aso关键词排名优化是什么
  • 滕州网站建设推广微博推广效果怎么样
  • 康复中心网站建设方案留号码的广告网站不需要验证码
  • 公司网站建设需要哪些内容seo对各类网站的作用
  • wordpress主题修改头部淄博seo网络公司
  • 中国大型建筑公司有哪些优化公司治理结构
  • 景德镇网站建设哪家好网络推广站
  • 亚马逊网站建设与维护方法分析如何让别人在百度上搜到自己公司
  • 企业网站的建立步骤网络广告的形式
  • 广州南站在哪个区天津seo推广服务
  • 梧州最权威的综合性新闻门户网站关键词怎么选择技巧
  • 在线做英语题的网站软文广告300字范文
  • 什么是网站建设近期热点新闻事件50个
  • 单产品网站建设网络建站工作室
  • wordpress 引用js河南靠谱seo地址
  • 做自己的网站要多久站长工具之家seo查询
  • html代码有哪些衡阳seo排名
  • 昆明门户网站网络营销与直播电商是干什么的
  • 数据资源网站如何做seo服务公司
  • 开封市网站建设公司游戏代理推广渠道
  • 怎样用网络挣钱网络推广优化招聘
  • 票务网站开发端口网站建设方案内容
  • 淘宝上做淘宝客的网站百度在线人工客服