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

游戏网站建设多少线上宣传方案

游戏网站建设多少,线上宣传方案,怎么查询网站真假备案,明年做那些网站能致富文章目录长度最小的子数组习题暴力解法滑动窗口长度最小的子数组 本节对应代码随想录中:代码随想录,讲解视频:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili 习题 题目链接:209. 长度最小的子数…

文章目录

    • 长度最小的子数组
      • 习题
      • 暴力解法
      • 滑动窗口

长度最小的子数组

本节对应代码随想录中:代码随想录,讲解视频:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili

习题

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

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

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

示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

暴力解法

直接能想到的就是用两个 for 循环,第一个循环遍历起始位置,第二个 for 循环向后遍历直到找到满足其和 ≥ target 的位置,我的代码如下(非最优,并且会超时,仅用于个人分析记录):

class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int res = 999999;for (int i = 0; i < nums.size(); i++) {int sum = 0, count = 999999;for (int j = i; j < nums.size(); j++) {sum += nums[j];if (sum >= target) {count = j - i + 1;break;}}if (count < res) {res = count;}}if(res!=999999){return res;}return 0;}
};

比较代码随想录上的暴力解法,有以下几点可以注意下

  • 初始 res 时本意是想初始一个比较大的值,用 res=INT32_MAX 更好
    • INT_MAX 一般和 INT32_MAX 相同,但如果是16位时, INT_MAX 要更小点,所以用 INT32_MAX 更好
  • 代码中后面两个 if 判断换成三元运算符更好,即 ` ? :

滑动窗口

C++中的滑动窗口是一种常见的数组/字符串问题的解决方案,它可以将一个问题的时间复杂度从 O(n^2)降低到 O(n)或者 O(nlogn),通常涉及到从给定的数据序列中找到需要进行操作的子串或子序列等。

滑动窗口的基本思路是:用两个指针表示现在关注的区间,即左端点(left pointer)和右端点(right pointer),让其构成一个窗口。移动右指针扩大长度,直到包含满足条件的子串(比如大于等于target)。然后,尝试缩小左端点以尽可能的减小满足条件的窗口长度,同时继续移动右指针,查找再次满足条件的子串。重复这个过程直到最右侧,得到最优解。

暴力解法中我们是遍历窗口的初始位置,对于每个初始位置向后遍历剩余元素寻找满足条件的窗口。而滑动窗口是遍历窗口的结束位置,如果当前窗口满足条件,那左边的指针就要向右移动即缩小窗口,其实也算是双指针。

class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int left = 0, sum = 0,subLength = 0;int ans = INT32_MAX;  // 答案初始化为整数最大值for (int right = 0; right < nums.size(); right++) {sum += nums[right];while (sum >= target) {  // 当sum>=target时,意味着当前窗口的总值大于等于target了subLength = (right - left + 1);  // 取子序列的长度ans = ans < subLength ? ans : subLength;  // 更新anssum -= nums[left]; // 窗口右移那就要减去原来窗口左边的值left++;  // 通过左指针向右移动收缩窗口}}return ans == INT32_MAX ? 0 : ans;  // 如果没找到就返回0}
};

代码中 while (sum >= target) 使用的是 while 而不是 if,因为当缩小窗口的时候是一个循环的过程。

如1 1 1 4中 target=4,那找到满足条件的窗口=4的时候,左指针应该是从初始的1不断向右移动直到新的窗口不大于等于 target 时停止

http://www.ds6.com.cn/news/39719.html

相关文章:

  • 海外网站seo优化seo快速软件
  • 网站合同书自己个人怎样做电商
  • 中国企业网官方网站下载外贸网站推广服务
  • 中央纪委网站 举报 要这么做才有效独立站怎么建站
  • 二手网站哪些做的比较好营销管理制度范本
  • 国外交友网站怎么做地推接单平台网
  • 申请绿色网站如何在百度上做推广
  • 多语言网站建设价格app推广软件有哪些
  • 做食物网站应该考虑些什么意思台州做优化
  • 霸州建设局网站福州网站建设方案外包
  • 无锡市城乡和住房建设局网站株洲专业seo优化
  • 哪个视频网站有潮汕做爰视频个人网站设计成品
  • 做网站的行情外包公司是什么意思
  • 网站正在开发中免备案域名
  • wordpress10款音乐插件win10优化工具下载
  • 深圳高端网站建设电话企业seo服务
  • 白山市网站建设seo排名
  • 怎样免费网站建设优化大师有用吗
  • 百度seo优化培训宁波 seo排名公司
  • 建设一个网站需要什么手续搜什么关键词能找到网站
  • 劳动保障局瓯海劳务市场和做网站注册教育培训机构需要什么条件
  • 彩票网站wordpress模板无锡网站制作优化
  • 郑州汉狮做网站的公司seo是什么意思中文
  • 兰州公司网站建设青海seo关键词排名优化工具
  • 装饰设计工程搜索引擎优化的方法有哪些?
  • 做网站必须要购买空间吗网站流量统计系统
  • 做设计赚钱网站有哪些优化网站标题
  • 网站开发实用技术答案整站外包优化公司
  • 网站建站建设怎么做seo公司
  • 网站seo外包服务网络营销软文范文