数组中连续子数组和
来源:互联网 发布:数据挖掘模型分类 编辑:程序博客网 时间:2024/05/20 07:36
1、LeetCode上209号问题给定一个整型数组s,找到数组中最短的一个连续子数组,使得连续子数组的数字和sum>=s,返回这个最短的连续子数组的返回值。
如-给定的数组[2,3,1,2,4,3] s=7;
答案为[4,3]返回的是2。
这里当没有sum>=s情况的时候,返回0;
#include <iostream>#include <cassert>#include <vector>#include<algorithm>using namespace std;// 暴力解法// 时间复杂度: O(n^3)// 空间复杂度: O(1)class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int res = nums.size() + 1; for (int l = 0; l < nums.size(); l++){ for (int r = l; r < nums.size(); r++){ int sum = 0; for (int i = l; i <= r; i++) sum += nums[i]; if (sum >= s) res = min(res, r - l + 1); } if (res == nums.size() + 1) return 0; } return res; }};//时间复杂度O(n)两个索引分别从前向后从后向前共遍历数组一遍//空间复杂度O(1)没有开辟任何新的内存class Solution{public: int minSubArrayLen(int s, vector<int>&nums){ int l = 0, r = -1;//nums[l...r]为我们的滑动窗口 int sum = 0; int res = nums.size() + 1; while (l < nums.size()){ if ((r+1)<nums.size() && sum < s){ r++; sum += nums[r]; } else sum -= nums[l++]; if (sum >= s) res = min(res, r - l + 1); } if (res == nums.size() + 1) return 0; return res; }};int main() { int nums[] = { 2, 3, 1, 2, 4, 3 }; vector<int> vec(nums, nums + sizeof(nums) / sizeof(int)); int s = 7; cout << Solution().minSubArrayLen(s, vec) << endl; return 0;}
0 0
- 数组中连续子数组和
- 数组中连续子数组的和的最大和
- 算法---数组中连续子数组和最大值
- 求数组中连续子数组的最大和
- 求一个数组中连续子数组的最大和
- 求数组中最大连续子数组的和
- 【刷题剑指offer】数组中连续子数组的最大和
- 【C++】数组中连续子数组的最大和
- 在数组中寻找连续子数组和最大值
- 子数组连续和最大值
- 连续子数组最大和
- 不连续子数组和
- 连续最大子数组和
- 连续子数组最大和
- 最大连续子数组和
- 连续子数组最大和
- 最大连续子数组和
- 最大连续子数组和
- linux(Cent OS)安装python MySQLdb
- STM32中flash大小-hex文件大小-bin文件大小之间的关系
- log4.net动态修改配置
- Visio 去交点处跨线
- 数据结构之线性表——链表的链式存储(链式描述)
- 数组中连续子数组和
- quartz定时器的配置 和 cronExpression的表达式
- 状态压缩dp入门题目
- 渗透测试工具sqlmap基础教程
- 两个IDEA插件推荐
- iOS8 中 重新计算TablviewHeaderView的frame后,更新并没有效果,解决方法如下
- 新版pycharm django同步数据库的问题
- 376. Wiggle Subsequence
- 添加 @RequestBody,浏览器控制台报 415错误