题目描述:
现给你一个数组A,A的长度为N,要求输出子数组(P<=Q),其中0<=P<=Q<=N的最长相同元素个数不超过2个;
example:
1、输入[5,4,4,5,1,2,2,0,12],子数组可以有很多,(0,3)、(2,3)、(4,6)都能满足条件,长度分别为4、2、3;最后程序返回4;
2、输入[2,2,2,2,2,2,2,2],返回8;
思路分析:
本题可以利用set来实现,就不断取子数组,如果set的大小超过2即退出循环,继续处理下一个子数组;
代码如下:
#include<iostream>
#include<set>
#include<vector>
using namespace std;
int Solution(vector<int>& A) {
if (A.empty()) return 0;
if (A.size() == 1) return 1;
int result = INT_MIN;
set<int> temp;
for (int i = 0; i < A.size();i++) {
for (int j = i + 1; j < A.size();j++) {
int num = 0;
for (int m = i; m <= j; m++) {
temp.insert(A[m]);
if (temp.size() == 1 || temp.size() == 2)
num++;
else
{
break;
}
}
result = result > num ? result : num;
temp.clear();
}
return result;
}
}
int main(int argc,char** argv) {
vector<int> test = {2,2,2,2,2,2,2,2};
cout << "result:" << Solution(test) << endl;
system("pause");
return 0;
}
结果如下: