1. Linear Scan from Left
Intuition
Iterate from index 0 to n - 1. If arr[i] <= x, update ans = i. If arr[i] > x, since array is sorted, break the loop early. Return ans.
When to apply: Unsorted collections or very small array sizes.
Algorithm
- Step 1: Initialize ans = -1.
- Step 2: Iterate i from 0 to arr.length - 1.
- Step 3: If arr[i] <= x, update ans = i.
- Step 4: Else (arr[i] > x), break loop.
- Step 5: Return ans.
#include <iostream>#include <vector> using namespace std; int findFloor(const vector<int>& arr, int x) { int ans = -1; for (int i = 0; i < (int)arr.size(); i++) { if (arr[i] <= x) { ans = i; } else { break; } } return ans;} int main() { vector<int> arr = {1, 2, 8, 10, 11, 12, 19}; cout << "Linear Floor of 5: " << findFloor(arr, 5) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(N)— Worst case checks all N elements. - Space complexity:
O(1)— Uses constant auxiliary memory.