长度最小的子数组(c++题解)

题目描述

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

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

输入格式

第一行输入两个整数n 和 target

第二行输入包含有n个元素的num序列

输出格式

输出一个整数,表示满足题目要求的序列最小长度,若不存在,输出0

样例

样例输入 1

复制6 7
2 3 1 2 4 3

样例输出 1

复制2

样例解释 1

子数组 [4,3] 是该条件下的长度最小的子数组。

样例输入 2

复制3 4
1 4 4

样例输出 2

复制1

样例输入 3

复制8 11
1 1 1 1 1 1 1 1

样例输出 3

复制0

____________________________________________________________________________
日常发作业题解。 

也是简单到爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆表的题

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

____________________________________________________________________________

#include 
using namespace std;
int n,m,x,ans=100000,cnt;
int a[1000005];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	int r=1,l=1;
	cnt=a[1];
	while(r<=n){//不定长度滑动窗口
        if(cnt>=m){
        	ans=min(ans,r-l+1);
        	cnt-=a[l];
        	l++;
		}else{
			r++;
			cnt+=a[r];
		}
	}
	if(ans==100000)cout<<"0"; 
	else cout<

 

你可能感兴趣的:(c++,算法,数据结构)