1. 程式人生 > >筆試題之陣列中的子陣列的相同元素個數不超過2個的最長子陣列的大小

筆試題之陣列中的子陣列的相同元素個數不超過2個的最長子陣列的大小

題目描述:
現給你一個數組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; }

結果如下:
這裡寫圖片描述