假设我们有一个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