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

徐州市网站建设_网站建设公司_留言板_seo优化

南宁seo多少钱费用,安徽网站优化怎么做,永久免费网站虚拟主机,网站怎么做免费推广方案力扣面试150题 #xff5c; 209.长度最小的子数组 题目描述解题思路代码实现 题目描述 209.长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] … 力扣面试150题 209.长度最小的子数组 题目描述解题思路代码实现 题目描述 209.长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] 并返回其长度。如果不存在符合条件的子数组返回 0 。 示例 1 输入target 7, nums [2,3,1,2,4,3] 输出2 解释子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2 输入target 4, nums [1,4,4] 输出1 示例 3 输入target 11, nums [1,1,1,1,1,1,1,1] 输出0 提示 1 target 1091 nums.length 1051 nums[i] 105 进阶 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。 解题思路 滑动窗口经典题目。 所谓滑动窗口就是不断的调节子序列的起始位置和终止位置从而得出我们要想的结果。 在暴力解法中是一个 for 循环滑动窗口的起始位置一个 for 循环为滑动窗口的终止位置用两个 for 循环完成了一个不断搜索区间的过程。 首先要思考如果用一个 for 循环那么应该表示 滑动窗口的起始位置还是终止位置。 如果只用一个for循环来表示 滑动窗口的起始位置那么如何遍历剩下的终止位置 此时难免再次陷入 暴力解法的怪圈。 所以只用一个for循环那么这个循环的索引一定是表示滑动窗口的终止位置。 在本题中实现滑动窗口主要确定如下三点 窗口内是什么如何移动窗口的起始位置如何移动窗口的结束位置 窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。 窗口的起始位置如何移动如果当前窗口的值大于s了窗口就要向前移动了也就是该缩小了。 窗口的结束位置如何移动窗口的结束位置就是遍历数组的指针也就是for循环里的索引。 滑动窗口的精妙之处在于根据当前子序列和大小的情况不断调节子序列的起始位置。从而将O(n^2)暴力解法降为O(n)。 代码实现 class Solution { public:int minSubArrayLen(int target, vectorint nums) {int result INT32_MAX:int sum 0; // 滑动窗口数值之和int subLen 0; // 滑动窗口的长度int i 0; // 滑动窗口起始位置for (int j 0; j nums.size(); j) {sum nums[j];while (sum target) { // 每次更新 i 不断比较子序列是否符合条件subLen (j - i 1); // 取子序列的长度result result subLen ? result : subLen;sum - nums[i]; // 不断变更子序列的起始位置i}}// 如果 result 没有被赋值的话就返回 0说明没有符合条件的子序列return result INT32_MAX ? 0 : result;} };
http://www.ihoyoo.com/news/838.html

相关文章:

  • 菜鸟如何建网站网站的内容有哪些内容
  • 模板王网站怎么下载不了模板网站的程序和数据库怎么做
  • 网站建设需求分析流程图wordpress 语言设定
  • php笔记网站网上花店网页制作代码
  • 北京网站设计有名 乐云践新安徽区块链虚拟币网站开发方案