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 Javascript?
Imagine you have a long list of sorted numbers, like heights of students in a class. You want to quickly find the closest height that is just smaller or equal (floor) or just bigger or equal (ceil) to a given height.
If you try to check each number one by one from the start, it will take a lot of time, especially if the list is very long. You might also make mistakes by missing the closest smaller or bigger number.
Using the floor and ceil concept with a smart search method, you can quickly jump to the right place in the list without checking every number. This saves time and avoids errors.
function findFloor(arr, x) {
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i] <= x) return arr[i];
}
return null;
}function findFloor(arr, x) {
let left = 0, right = arr.length - 1, floor = null;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (arr[mid] <= x) {
floor = arr[mid];
left = mid + 1;
} else {
right = mid - 1;
}
}
return floor;
}This lets you find the closest smaller or bigger number in a sorted list instantly, making your programs faster and smarter.
When booking a flight, you want to find the closest available seat price that is just below or above your budget. Floor and ceil help find these prices quickly.
Manual search is slow and error-prone for large sorted lists.
Floor and ceil with binary search find closest smaller or bigger values fast.
This technique improves speed and accuracy in many real-world tasks.
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 with options
The greatest element less than or equal to the number matches this definition exactly, while others describe ceil or incorrect concepts.Final Answer:
The greatest element less than or equal to the number -> Option AQuick Check:
Floor = greatest ≤ number [OK]
- Confusing floor with ceil
- Thinking floor must be strictly less than number
- Mixing floor with average or median
x in a sorted array arr using binary search?Solution
Step 1: Understand binary search for floor
Binary search uses start and end pointers, calculates mid, and checks ifarr[mid] <= xto move start or end accordingly.Step 2: Evaluate options
Use a while loop withstart = 0,end = arr.length - 1, update mid and checkarr[mid] <= xcorrectly describes binary search logic for floor. Options A, B, and C are incorrect or irrelevant.Final Answer:
Use a while loop with start=0, end=arr.length-1, update mid and check arr[mid] ≤ x -> Option DQuick Check:
Binary search with arr[mid] ≤ x finds floor [OK]
- Using linear search instead of binary search
- Using indexOf which only finds exact matches
- Misusing Math.floor which works on numbers, not arrays
const arr = [1, 3, 5, 7, 9];
function findFloor(arr, x) {
let start = 0, end = arr.length - 1, floor = -1;
while (start <= end) {
let mid = Math.floor((start + end) / 2);
if (arr[mid] <= x) {
floor = arr[mid];
start = mid + 1;
} else {
end = mid - 1;
}
}
return floor;
}
console.log(findFloor(arr, 6));Solution
Step 1: Trace binary search for floor of 6
Initial start=0, end=4, floor=-1. mid=2 (arr[2]=5) ≤ 6, floor=5, start=3. mid=3 (arr[3]=7) > 6, end=2. Loop ends.Step 2: Return floor value
Floor found is 5, which is the greatest element ≤ 6.Final Answer:
5 -> Option BQuick Check:
Floor of 6 in [1,3,5,7,9] is 5 [OK]
- Returning mid index instead of value
- Confusing floor with ceil
- Not updating floor variable correctly
x in a sorted array arr:function findCeil(arr, x) {
let start = 0, end = arr.length - 1, ceil = -1;
while (start <= end) {
let mid = Math.floor((start + end) / 2);
if (arr[mid] >= x) {
ceil = arr[mid];
end = mid + 1;
} else {
start = mid + 1;
}
}
return ceil;
}Solution
Step 1: Analyze binary search update for ceil
When arr[mid] ≥ x, we update ceil and must move end to mid - 1 to search left side for smaller ceil.Step 2: Identify incorrect update
The code incorrectly setsend = mid + 1, which moves end right, causing infinite loop or wrong result.Final Answer:
The line end = mid + 1; should be end = mid - 1; -> Option AQuick Check:
For ceil, move end left with end = mid - 1 [OK]
- Moving end pointer in wrong direction
- Confusing ceil logic with floor
- Incorrect initial ceil value
arr = [2, 4, 6, 8, 10], write a function to find both floor and ceil of a number x. What will be the floor and ceil of x = 5?Solution
Step 1: Understand floor and ceil definitions
Floor is greatest element ≤ x, ceil is smallest element ≥ x.Step 2: Find floor and ceil for x=5 in arr
Elements ≤ 5 are 2 and 4; greatest is 4 (floor). Elements ≥ 5 are 6, 8, 10; smallest is 6 (ceil).Final Answer:
Floor = 4, Ceil = 6 -> Option CQuick Check:
Floor ≤ 5 = 4, Ceil ≥ 5 = 6 [OK]
- Swapping floor and ceil values
- Assuming floor or ceil equals x if not present
- Choosing wrong boundary elements
Ready to prove it?
Pass the test and this pattern moves unknown
