Поиск пола и потолка отсортированного массива с помощью C ++ STL

Опубликовано: 2 Декабря, 2021

Для отсортированного массива задача состоит в том, чтобы с помощью STL найти нижнюю и верхнюю границы заданных чисел.

Примеры:

Ввод: arr [] = {1, 2, 4, 7, 11, 12, 23, 30, 32},
       значения [] = {1, 3, 5, 7, 20, 24}
Вывод: минимальные значения: 1 2 4 7 12 23 
       Максимальные значения: 1 4 7 7 23 30 

В случае floor () : lower_bound () метод os STL будет использоваться для поиска нижней границы. Этот метод возвращает итератор элемента, большего или равного указанному элементу.

В случае ceil () : upper_bound () метод os STL будет использоваться для определения верхней границы. Этот метод возвращает итератор элемента, большего или равного указанному элементу.

Реализация:

// C++ program to find the floor and ceil
// of a given numbers in a sorted array
#include <bits/stdc++.h>
using namespace std;
// Function to find floor of list of
// values using lower_bound in STL
void printFloor( int arr[], int n1,
int findFloor[], int n2)
{
// Find and print the Floor Values
int low;
cout << "Floor : " ;
for ( int i = 0; i < n2; i++) {
low = (lower_bound(arr, arr + n1,
findFloor[i])
- arr);
if (arr[low] > findFloor[i])
cout << arr[low - 1] << " " ;
else
cout << arr[low] << " " ;
}
cout << endl;
}
// Function to find Ceil of list of
// values using upper_bound in STL
void printCeil( int arr[], int n1,
int findCeil[], int n2)
{
// Find and print the Ceil Values
int up;
cout << "Ceil : " ;
for ( int i = 0; i < n2; i++) {
up = (upper_bound(arr, arr + n1,
findCeil[i])
- arr);
if (arr[up] > findCeil[i]
&& arr[up - 1] == findCeil[i]) {
cout << arr[up - 1] << " " ;
}
else
cout << arr[up] << " " ;
}
cout << endl;
}
// Driver code
int main()
{
// Get the sorted array
int arr[] = { 1, 2, 4, 7, 11, 12, 23, 30, 32 };
int n1 = sizeof (arr) / sizeof (arr[0]);
// Print Array
cout << "Original Array: " ;
for (unsigned int i = 0; i < n1; i++)
cout << " " << arr[i];
cout << " " ;
// Given values whose floor and ciel
// values are needed to find
int find[] = { 1, 3, 5, 7, 20, 24 };
int n2 = sizeof (find) / sizeof (find[0]);
// Print Values whose floor
// and ceil is to be found
cout << "Values: " ;
for (unsigned int i = 0; i < n2; i++)
cout << find[i] << " " ;
cout << " " ;
// Print Floor Values
printFloor(arr, n1, find, n2);
// Print Ceil Values
printCeil(arr, n1, find, n2);
return 0;
}
Выход:
Массив: 1 2 4 7 11 12 23 30 32
Значения: 1 3 5 7 20 24 
Этаж: 1 2 4 7 12 23 
Ceil: 1 4 7 7 23 30
Хотите учиться на лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для языка и STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .