C++ 中数组中不考虑相邻元素的最大设置位数和
在这个问题中,我们给定了一个整数数组 arr[]。我们的任务是创建一个程序来计算 C++ 中不考虑相邻元素的数组中的最大设置位数和。
问题描述 - 在这里,我们有一个数组 arr[]。我们必须找到每个数字的设置位数。然后,我们将找到数组中相邻元素的最大设置位数和。即 a[i] + a[i+2] ... 的最大和。
让我们举个例子来理解这个问题,
输入
arr[] = {1, 4, 6, 7}输出
4
解释
带有元素二进制形式的数组
arr[] = {01, 100, 101, 111}
Bit count array = {1, 1, 2, 3}交替位计数,
arr[0] + arr[2] = 1 + 2 = 3 arr[1] + arr[3] = 1 + 3 = 4
最大和 = 4。
解决方案方法
为了解决这个问题,我们将简单地找到数字中设置位的数量。并找到具有最大设置位计数的交替对。
最大和将适用于从 0 开始或从 1 开始的数组。因此,我们只需要检查其中的两种情况。
程序说明我们解决方案的工作原理,
示例
#include<iostream>
using namespace std;
int countSetBit(int n){
int setBits = 0;
while(n) {
setBits++;
n = n & (n - 1);
}
return setBits;
}
int findMaxBitAltSubArray(int arr[], int n){
int EvenSum = countSetBit(arr[0]);
int OddSum = 0;
for (int i = 1; i < n; i++){
if(i % 2 == 0){
EvenSum += countSetBit(arr[i]);
} else {
OddSum += countSetBit(arr[i]);
}
}
if(EvenSum >= OddSum){
return EvenSum;
}
return OddSum;
}
int main() {
int arr[] = {1, 4, 6, 7};
int n = 4;
cout<<"The maximum set bit sum in the array without considering adjacent elements is "<<findMaxBitAltSubArray(arr, n);
return 0;
}输出
The maximum set bit sum in the array without considering adjacent elements is 4
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP