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

C++의 동일한 배열에 있는 모든 요소의 바닥

<시간/>

이 문제에서는 정수 요소의 배열 rr[]이 제공됩니다. 우리의 임무는 동일한 배열에 있는 모든 요소의 바닥을 찾는 프로그램을 만드는 것입니다. 요소의 바닥이 존재하면 바닥을 인쇄하고 그렇지 않으면 -1을 인쇄합니다.

배열의 요소 바닥 배열의 요소보다 작거나 같은 가장 가까운 요소입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

Input: arr[] = {3, 1, 5 ,7, 8, 2}
Output: 2 -1 3 5 7 1

솔루션 접근 방식

문제를 해결하는 방법은 중첩 루프를 사용하는 것입니다. 하나는 배열의 foreach 요소를 반복하는 것이고 내부는 배열에서 요소의 바닥을 찾기 위한 것입니다.

문제를 해결하는 또 다른 방법은 추가 배열을 사용하여 정렬된 배열을 저장하는 것입니다. 그런 다음 원래 배열을 반복하고 이진 검색 알고리즘을 사용하여 정렬된 배열에서 요소의 바닥을 찾습니다.

예시

솔루션 작동을 설명하는 프로그램

#include <bits/stdc++.h>
using namespace std;

void printFloorEle(int arr[], int n){
   vector<int> sortedArr(arr, arr + n);
   sort(sortedArr.begin(), sortedArr.end());
   for (int i = 0; i < n; i++) {
      if (arr[i] == sortedArr[0]) {
         if (arr[i] == sortedArr[1])
            cout<<arr[i];
         else
            cout<<-1;
         cout<<"\t";
         continue;
      }
      auto iterator = lower_bound(sortedArr.begin(),sortedArr.end(), arr[i]);
      if (iterator != sortedArr.end() && *(iterator + 1) == arr[i])
         cout<<arr[i]<<"\t";
      else
         cout<<*(iterator - 1)<<"\t";
   }
}
int main(){
   int arr[] = { 3, 1, 5 ,7, 8, 2 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The Floor of every element of the given array is ";
   printFloorEle(arr, n);
   return 0;
}

출력

The Floor of every element of the given array is 2 -1 3 5 7
1