n개의 요소로 구성된 배열이 있다고 가정합니다. 선택한 두 요소의 절대 차이가 1보다 작거나 같도록 배열에서 선택할 최대 요소 수를 찾아야 합니다. 따라서 배열이 [2, 2, 3, 4, 5], 그러면 요소는 3이 되므로 최대 개수가 있는 시퀀스는 2, 2, 3입니다.
0과 1의 절대 차이는 숫자가 x 및 x + 1 유형이 될 수 있음을 의미합니다. 따라서 아이디어는 배열 요소의 빈도를 저장하는 것입니다. 따라서 연속된 두 요소의 최대 합을 찾으면 솔루션이 됩니다.
예
#include <iostream>
#include <map>
using namespace std;
int maxElem(int arr[], int n) {
map<int,int> occurrence;
for(int i=0;i<n;++i){
if(occurrence[arr[i]])
occurrence[arr[i]] += 1;
else
occurrence[arr[i]] = 1;
}
int ans = 0, key;
map<int,int>:: iterator it=occurrence.begin();
while(it!=occurrence.end()) {
key = it->first;
++it;
if(occurrence[key+1]!=0)
ans=max(ans,occurrence[key]+occurrence[key+1]);
}
return ans;
}
int main(){
int arr[] = {2, 2, 3, 4, 5};
int n = sizeof(arr)/sizeof(arr[0]);
cout<<"Result is: " << maxElem(arr, n);
} 출력
Result is: 3