筆試題之陣列中的子陣列的相同元素個數不超過2個的最長子陣列的大小
阿新 • • 發佈:2019-01-31
題目描述:
現給你一個數組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;
}
結果如下: