您的位置:首页 > 其它

数组中子数组等于k的最大长度

2017-08-24 10:39 211 查看

题目:

假定有数组arr[4]={3,1,4,7}, 求出数组中子数组中等于12的最大长度。


基本思想

创建一个hash表,其key等于数组中遍历过的数的和,其value等于当前遍历的数在数组中的下标。用sum保存遍历过的数的总和,len保存最大长度;依次从数组的开头遍历,如果sum-k的值在hash表中有记录,则len更新为i-map[sum-k]和len的较大值,如果不存在就将{sum,i}加入map中,以便下次查询。

代码如下:

#include <iostream>
#include <map>
#include <stdlib.h>
using namespace std;
int maxLength(int* arr,int n,int k){
if(arr==NULL)
return 0;
map<int,int> m;
m.insert({0,-1});
int len=0;
int sum=0;
for(int i=0;i<n;i++){
sum+=arr[i];
if(m.find(sum-k)!=m.end()){
len=max(i-m[sum-k],len);
}
else{
m.insert({sum,i});
}
}
return len;
}
int main()
{
int arr[]={3,1,4,7,5};
cout<<maxLength(arr,5,12)<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  遍历 hash
相关文章推荐