标签:
Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn‘t one, return 0 instead.
For example, given the array [2,3,1,2,4,3]
and s = 7
,
the subarray [4,3]
has the minimal length under the problem constraint.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
这道题采用的是两个指针(滑动窗口的方法),先从0开始找到一个窗口,然后通过这两个指针来移动窗口和改变窗口的大小,再保存一个最小值。一直到最后。
#include<iostream> #include<vector> using namespace std; int minSubArrayLen(int s, vector<int>& nums) { int n=nums.size(); int start=0; int end=0; int min; int sum=0; while(end<n) { sum+=nums[end]; if(sum>=s) { min=end+1; break; } end++; } if(end>=n) return 0; while(end<n) { if(sum>=s) { while(start<=end) { sum-=nums[start]; start++; if(sum>=s) { int a=end-start+1; if(a<min) min=a; } else break; } if(end<n&&start<end) { end++; sum+=nums[end]; } else break; } else { end++; if(end>n) break; else sum+=nums[end]; } } return min; } int main() { int a[6]={2,3,1,2,4,3}; vector<int> vec(a,a+6); cout<<minSubArrayLen(7,vec)<<endl; }
leetcode_209题——Minimum Size Subarray Sum(两个指针)
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4659384.html