数组中子数组等于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; }
相关文章推荐
- 求长度为n的数组中,加和最大的子数组
- C 数组最大长度
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 最大值减去最小值小于或者等于num的子数组数量
- java中数组的最大长度以及List的最大容量
- 求当前数组中,最大值减最小值等于sum的数组个数
- 《好未来编程题》 输入n个整数,输出出现次数大于等于数组长度一半的数
- 找出一个数组中子数组和的最大值
- 数组与矩阵---数组中子数组的最大累乘积
- 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
- Java整型数组的最大长度到底有多长?
- 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组 最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上
- 【算法题】求数组中子数组的最大乘积
- 华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。 .
- 求随机数构成的数组中找到长度大于或等于3的最长的等差数列
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 求二维数组中子数组和中最大的值,及子数组
- 最大值减去最小值小于或者等于num的子数组数量