What if you could find the closest match in a huge list instantly, without checking every item?
Why Floor and Ceil in Sorted Array in DSA C++?
Imagine you have a sorted list of prices for items in a store. You want to find the closest price that is just less than or equal to your budget (floor), or just greater than or equal to your budget (ceil). Doing this by checking each price one by one is like searching for a book in a huge library by reading every page.
Checking each element manually is slow and tiring, especially if the list is very long. It's easy to make mistakes, like missing the closest price or taking too long to find it. This wastes time and can lead to wrong decisions.
Using the floor and ceil concept with a sorted array lets you quickly jump to the right place without checking everything. It's like having a smart librarian who points you directly to the closest book you want, saving time and effort.
int floor = -1; for (int i = 0; i < n; i++) { if (arr[i] <= target) floor = arr[i]; }
int floor = -1, left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] <= target) { floor = arr[mid]; left = mid + 1; } else { right = mid - 1; } }
This concept enables lightning-fast searches for closest values in sorted data, making programs efficient and reliable.
When booking flights, you want the closest cheaper or slightly more expensive ticket than your budget. Floor and ceil help find these options instantly from sorted price lists.
Manual search is slow and error-prone for large sorted arrays.
Floor and ceil use smart searching to find closest smaller or larger values quickly.
This makes programs faster and more accurate in real-world tasks like pricing or scheduling.
Practice
floor of a number mean in a sorted array context?Solution
Step 1: Understand floor definition in sorted array
The floor of a number is the greatest element in the array that is less than or equal to the given number.Step 2: Compare options with definition
The greatest element less than or equal to the number matches the definition exactly. Other options describe different concepts.Final Answer:
The greatest element less than or equal to the number -> Option AQuick Check:
Floor = greatest ≤ number [OK]
- Confusing floor with ceil
- Choosing smallest element greater than number
- Thinking floor is average or exact match only
Solution
Step 1: Analyze function parameters
The function needs the array, its size, and the target number to find floor.Step 2: Check each option's signature
int findFloor(int arr[], int n, int x); correctly uses array pointer, size, and target number. void findFloor(int arr[], int n, int x); returns void which is incorrect. int findFloor(int arr, int n, int x); uses int arr instead of array. int findFloor(int arr[], int x); misses size parameter.Final Answer:
int findFloor(int arr[], int n, int x); -> Option AQuick Check:
Correct signature includes array, size, target [OK]
- Omitting array size parameter
- Using wrong array type
- Returning void instead of int
int arr[] = {1, 3, 5, 7, 9};
int n = 5;
int x = 6;
int floor = -1;
for (int i = 0; i < n; i++) {
if (arr[i] <= x) floor = arr[i];
else break;
}
std::cout << floor;Solution
Step 1: Trace the loop and condition
Loop checks each element ≤ 6. Elements 1, 3, 5 satisfy condition, floor updates to 5. When arr[i] = 7, condition fails and loop breaks.Step 2: Determine final floor value
Floor remains 5 after loop ends.Final Answer:
5 -> Option CQuick Check:
Floor of 6 in array = 5 [OK]
- Choosing 6 which is not in array
- Choosing 7 which is > 6
- Not updating floor correctly
int findCeil(int arr[], int n, int x) {
int ceil = -1;
for (int i = 0; i < n; i++) {
if (arr[i] >= x) {
ceil = arr[i];
}
}
return ceil;
}Solution
Step 1: Understand the loop logic
The loop updates ceil whenever arr[i] ≥ x, but does not stop or check for smallest such element.Step 2: Identify the error
Because it keeps updating, it ends with the last element ≥ x, not the smallest. It should break or track minimum.Final Answer:
It does not return the smallest element ≥ x -> Option DQuick Check:
Ceil = smallest ≥ x, code returns largest ≥ x [OK]
- Not breaking loop after first valid ceil
- Updating ceil without checking if smaller
- Confusing floor and ceil logic
arr = {2, 4, 6, 8, 10}, what are the floor and ceil of x = 5? Choose the correct pair.Solution
Step 1: Find floor of 5 in array
Floor is greatest element ≤ 5. Elements ≤ 5 are 2 and 4, greatest is 4.Step 2: Find ceil of 5 in array
Ceil is smallest element ≥ 5. Elements ≥ 5 are 6, 8, 10, smallest is 6.Final Answer:
Floor = 4, Ceil = 6 -> Option BQuick Check:
Floor ≤ 5 = 4, Ceil ≥ 5 = 6 [OK]
- Assuming floor or ceil must equal x
- Choosing elements not in array
- Mixing floor and ceil values
Ready to prove it?
Pass the test and this pattern moves unknown
