Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 동일한 수의 세트 비트를 갖는 연속 배열 요소의 최대 수

<시간/>

정렬되지 않은 정수 요소 배열이 제공되며 작업은 다음과 같은 두 가지 주요 사항을 계산하는 것입니다.

  • 설정 비트 수가 같은 요소
  • 또한 동일한 세트 비트를 가진 요소는 본질적으로 연속적이어야 합니다.

입력

int arr[] = { 5, 8, 1, 2, 9, 12}

출력 − 동일한 수의 설정 비트를 갖는 연속 배열 요소의 최대 수는 − 3

입니다.

설명 - 우리는 배열의 요소에 대한 이진 숫자를 계산하고 설정 비트를 계산합니다.

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1
arr[4] = 9 => 1001 => total set bits are -: 2
Arr[5] = 12 => 1100 => total set bits are -: 2

따라서 동일한 수의 설정 비트를 가진 요소와 자연적으로 인접한 요소는 5, 9 및 12입니다. 따라서 동일한 수의 세트 비트를 갖는 연속 배열 요소의 최대 수는 3

입니다.

입력 - 정수 arr[] ={ 5, 8, 1, 2}

출력 − 동일한 수의 설정 비트를 갖는 연속 배열 요소의 최대 수는 − 2

입니다.

설명 - 우리는 배열의 요소에 대한 이진 숫자를 계산하고 설정 비트를 계산합니다.

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1

따라서 동일한 수의 설정 비트를 가진 요소와 자연적으로 인접한 요소는 1과 2입니다. 따라서 동일한 수의 세트 비트를 갖는 연속 배열 요소의 최대 수는 2

입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 정수형 배열 요소 입력

  • 크기 함수를 사용하여 배열의 크기를 계산하고 함수에 전달

  • 임시 변수를 가져와서 값 1로 설정하고 값이 1인 최대 변수도 설정합니다.

  • 벡터 유형의 변수 vec 생성

  • 0부터 배열 크기까지 루프 시작

  • 전달된 주어진 요소의 총 세트 비트 수를 반환하고 카운트를 벡터에 계속 저장하는 "__builtin_popcount(element)" 함수를 사용하여 배열 요소의 이진 세트 비트를 계산합니다.

  • 1에서 벡터 크기까지 루프 시작

  • 벡터 내부에서 vec[i+1] =vec[i]인지 확인한 다음 temp 값을 1 증가시킵니다.

  • 그렇지 않으면 온도를 1로 설정하십시오.

  • max함수를 사용하여 temp와 maximum 사이의 최대값을 선택하여 최대값을 설정합니다.

  • 최대 변수 반환

  • 결과를 인쇄하십시오.

예시

#include <bits/stdc++.h>
using namespace std;
//function to calculate maximum same number of bits
int maximum_SameBits(int arr[], int size){
   int temp = 1;
   int maximum = 1;
   vector<int> vec;
   for (int i = 0; i < size; i++){
      vec.push_back(__builtin_popcount(arr[i]));
   }
   for (int i = 1; i < vec.size(); i++){
      if (vec[i + 1] == vec[i]){
         temp++;
      }
      else{
         temp = 1;
      }
      maximum = max(maximum, temp);
   }
   return maximum;
}
int main(){
   int arr[] = { 5, 8, 1, 2, 9, 12};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximum number of contiguous array elements with same number of set bits are:
   "<<maximum_SameBits(arr, size);
   return 0;
}

출력

Maximum number of contiguous array elements with same number of set bits are: 3