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

C++에서 절대 차이가 K를 초과하지 않는 배열의 최대 요소 수 계산

<시간/>

주어진 크기의 정수 요소의 arr[]와 양의 정수 k의 배열이 주어지고 절대 차이가 주어진 정수 k를 초과하지 않는 요소 쌍의 수를 계산하는 것이 작업입니다.

배열은 같은 유형의 요소에 대한 고정 크기 순차 컬렉션을 저장할 수 있는 일종의 데이터 구조입니다. 배열은 데이터 모음을 저장하는 데 사용되지만 종종 배열을 같은 유형의 변수 모음으로 생각하는 것이 더 유용합니다.

예를 들어

Input − int arr[] = {2, 3, 6, 12, 14}, k= 5
Output − count is : 3

설명 - 최대 절대 차이가 k보다 크지 않은 쌍, 즉 이 예에서 5로 형성된 쌍은 다음과 같습니다. (2, 3), (2, 6), (3,6) 즉 {2, 3, 6} 따라서 카운트 3입니다.

Input − int arr[] = {2, 3, 6, 12, 14}, k= 10
Output − count is : 4

설명 - 최대 절대 차이가 k보다 크지 않은 쌍, 즉 이 예에서 10으로 형성된 쌍은 다음과 같습니다. (2, 3), (2, 6), (3,6), (2, 12), (3, 12 ), (6, 12) 즉 {2, 3, 6, 12} 따라서 최대 요소가 4이므로 개수는 4입니다.

Input − int arr[] = {2, 3, 6, 12, 14}, k= 0
Output − count is : 0

설명 − 차이가 0인 쌍이 없으므로 count는 0입니다.

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

  • arr[] 및 양의 정수 k

    라고 가정해 보겠습니다.
  • 배열의 요소에 따라 정수 값을 반환하는 length() 함수를 사용하여 배열의 길이를 계산합니다.

  • 요소 수를 저장할 임시 변수를 가져옵니다.

  • 첫 번째와 마지막 두 개의 임시 변수를 선언하고 0으로 초기화합니다.

  • sort 메소드를 호출하여 배열을 정렬하고 배열과 배열의 크기를 함수의 인수로 전달합니다.

  • i에 대한 루프를 0으로 시작하고 i가 배열 크기보다 작습니다.

  • 루프 내에서 시작 while j

  • 동안 내부에서 IF count 로 설정합니다.

  • 개수 반환

  • 결과를 인쇄하십시오.

예시

#include <iostream>
#include <algorithm>
using namespace std;
int countmax(int arr[], int size, int K){
   int result = 0;
   int i = 0, j = 0;
   int beg = 0;
   int end = 0;
   // Sort the array
   sort(arr, arr + size);
   // Find max elements
   for (i = 0; i < size; i++) {
      // Count all elements which are in the range
      while (j < size && arr[j] <= arr[i] + K)
      j++;
      if (result < (j - i)) {
         result = (j - i);
         beg = i;
         end = j;
      }
   }
   // Return the max count
   return result;
}
// main function
int main(){
   int arr[] = { 2, 3, 6, 12, 14 };
   int size = sizeof(arr) / sizeof(arr[0]);
   int K = 5;
   cout <<"count is "<<countmax(arr, size, K) << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

count is 3