Discover how to find the closest number in a sorted list instantly, without checking every single item!
Why Floor and Ceil in Sorted Array in DSA Java?
Imagine you have a long list of sorted numbers, like heights of students in a class. You want to find the closest height that is just smaller or equal to a given height (floor), or just bigger or equal (ceil). Doing this by checking each number one by one is like searching for a friend in a crowd by asking every person their name.
Checking each number one by one is slow and tiring, especially if the list is very long. It's easy to make mistakes, like missing the closest number or stopping too early. This manual search wastes time and can frustrate you.
Using the floor and ceil concept with a sorted array lets you quickly jump to the right spot without checking every number. It's like having a map that guides you directly to the closest match, saving time and avoiding errors.
int floor = -1; for (int i = 0; i < arr.length; i++) { if (arr[i] <= target) floor = arr[i]; }
int floor = -1; int left = 0, right = arr.length - 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 a flight, you want to find the closest available seat price that is less than or equal to your budget (floor), or the cheapest seat price just above your budget (ceil). This helps you make smart choices quickly.
Manual search is slow and error-prone for large sorted lists.
Floor and ceil use smart searching to find closest values fast.
This makes programs efficient and user-friendly in 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 number.Step 2: Compare options with definition
The greatest element less than or equal to the number matches the definition exactly, others 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
- Thinking floor is strictly less than the number
- Mixing floor with average or median
Solution
Step 1: Check Java method signature syntax
Java methods must specify access modifier, return type, method name, and parameter types.Step 2: Validate each option
public static int findFloor(int[] arr, int target) is correct: public static int findFloor(int[] arr, int target). int findFloor(int arr[], target) misses access modifier and parameter type for target. static int findFloor(int[] arr, int target) throws Exception unnecessarily throws Exception. public int findFloor(int[] arr, int target, int size) has extra parameter 'size' not needed.Final Answer:
public static int findFloor(int[] arr, int target) -> Option DQuick Check:
Correct Java method signature = public static int findFloor(int[] arr, int target) [OK]
- Omitting access modifier
- Missing parameter types
- Adding unnecessary throws clause
int[] arr = {1, 3, 5, 7, 9} and target = 6, what is the floor and ceil of 6?Solution
Step 1: Identify floor of 6 in array
Floor is greatest element ≤ 6. Elements ≤ 6 are 1, 3, 5. Greatest is 5.Step 2: Identify ceil of 6 in array
Ceil is smallest element ≥ 6. Elements ≥ 6 are 7, 9. Smallest is 7.Final Answer:
Floor = 5, Ceil = 7 -> Option CQuick Check:
Floor ≤ 6 = 5, Ceil ≥ 6 = 7 [OK]
- Choosing floor greater than target
- Choosing ceil less than target
- Assuming target must be in array
public static int findFloor(int[] arr, int target) {
int low = 0, high = arr.length - 1;
int floor = -1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) return arr[mid];
else if (arr[mid] < target) {
floor = arr[mid];
low = mid + 1;
} else {
high = mid - 1;
}
}
return floor;
}What is the bug if the array is empty?
Solution
Step 1: Analyze behavior with empty array
If array is empty, arr.length = 0, so high = -1. Condition low <= high is false initially, so loop never runs.Step 2: Check return value when loop doesn't run
Variable floor initialized to -1 and returned as is, indicating no floor found.Final Answer:
Returns -1 correctly as floor does not exist -> Option AQuick Check:
Empty array returns -1 floor [OK]
- Assuming mid calculation causes error on empty array
- Expecting exception instead of -1 return
- Missing initialization of floor variable
int[] arr = {2, 4, 6, 8, 10}. You want to find the floor and ceil for target = 1 and target = 11. What are the correct floor and ceil values for these targets?Solution
Step 1: Find floor and ceil for target = 1
Floor is greatest element ≤ 1. No elements ≤ 1, so floor = -1 (not found). Ceil is smallest element ≥ 1, which is 2.Step 2: Find floor and ceil for target = 11
Floor is greatest element ≤ 11, which is 10. Ceil is smallest element ≥ 11, none exists, so ceil = -1.Final Answer:
For 1: Floor = -1, Ceil = 2; For 11: Floor = 10, Ceil = -1 -> Option BQuick Check:
Floor and ceil outside array bounds handled with -1 [OK]
- Returning array ends incorrectly as floor or ceil
- Confusing floor and ceil for out-of-bound targets
- Assuming floor or ceil always exists
Ready to prove it?
Pass the test and this pattern moves unknown
