求数组中等于给定值的最长子数组
//数组中等于给定值的最长子数组 #include <iostream> #include <map> #include <vector> using namespace std; int longest_sum_sub(const vector<int> &a,const int &aim) { if(a.empty()||a.size()==0) return -1; map<int,int> map;//sum,pos; map.insert({0,-1}); int maxLen=0; int curSum=0; for(int i=0;i<a.size();++i) { curSum+=a[i]; if(map.find(curSum-aim)!=map.end()) maxLen=max(maxLen,i-map.find(curSum-aim)->second); if(map.count(curSum)==0) map.insert({curSum,i}); } return maxLen; } int main() { vector<int> a{6,1,3,2,-1,1,5}; cout<<longest_sum_sub(a,6)<<endl; return 0; }
一个数组中既有奇数又有偶数,求奇数和偶数个数相等的最长的子数组
将奇数记为-1,偶数记为1,题目转换为求数组中等于0的最长子数组
原文:https://www.cnblogs.com/tianzeng/p/10555803.html