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.