码迷,mamicode.com
首页 > 编程语言 > 详细

子数组

时间:2016-08-05 21:43:04      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:子数组

/*************************
【题目】 未排序正数数组中累加和为给定值的最长子数组长度
给定一个数组 arr,该数组无序,但每个值均为正数,再给定一个正数 k。求 arr
的所有子数组中所有元素相加和为 k 的最长子数组长度。
例如,arr=[1,2,1,1,1],k=3。
累加和为 3 的最长子数组为[1,1,1],所以结果返回 3。
【要求】
时间复杂度 O(N),额外空间复杂度 O(1)
*************************/

#include <iostream>
using namespace std;
int  a[]={1,1,1,1,1,2,1};
int  n=7;
int  k=4;
void fun()
{
    int count_len=0;
    int i=0,j=0;
    int sum=a[0];
     while(j<n)
     {
         if(sum <k)  sum+=a[j++];
         if(sum==k) {count_len=(j-i+1>count_len)?(j-i+1):(count_len);sum-=a[i];++i;}
         if(sum >k)  {sum-=a[i];i++;}
     }
     cout<<count_len;
}
int main()
{
	cout << "Hello,C++ world of AnycodeX!" << endl;
	fun();
	return 0;
}


子数组

标签:子数组

原文地址:http://wzsts.blog.51cto.com/10251779/1834853

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!