查找最大元素数,以使它们的绝对差在C ++中小于或等于1
假设我们有一个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
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短