1. Linear Day Scan
Intuition
First check (long)m * k > n. Then iterate day d sequentially. For each day, iterate through flowers counting consecutive bloomed flowers. Return first day where bouquets >= m.
When to apply: Basic baseline check.
Algorithm
- Step 1: If (long)m * k > bloomDay.length return -1.
- Step 2: Loop day from min(bloomDay) to max(bloomDay).
- Step 3: Count bouquets formed by counting streaks of flowers with bloomDay[i] <= day.
- Step 4: If bouquets >= m, return day.
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std; class Solution {public: int minDays(vector<int>& bloomDay, int m, int k) { if ((long long)m * k > bloomDay.size()) return -1; int minD = 1e9, maxD = 0; for (int d : bloomDay) { minD = min(minD, d); maxD = max(maxD, d); } for (int day = minD; day <= maxD; ++day) { int bouquets = 0, count = 0; for (int d : bloomDay) { if (d <= day) { count++; if (count == k) { bouquets++; count = 0; } } else { count = 0; } } if (bouquets >= m) return day; } return -1; }}; int main() { // Sample driver execution cout << "Execution completed successfully." << endl; return 0;} Time & Space Complexity
- Time complexity:
O(n * (max(bloomDay) - min(bloomDay)))— Can take up to 109 iterations of O(n) work. - Space complexity:
O(1)— O(1) memory.