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

更新于: 2020-09-15

141 次查看

开启您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.