1. Linear Distance Increment
Intuition
Sort position array. Test every distance d starting from 1 upwards. Return d - 1 when canPlace(d, m) becomes false.
When to apply: Basic baseline check.
Algorithm
- Step 1: Sort position array.
- Step 2: Loop d from 1 to position[n-1] - position[0].
- Step 3: If canPlace(d, m) is false, return d - 1.
- Step 4: Return max possible distance.
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std; class Solution {public: int maxDistance(vector<int>& position, int m) { sort(position.begin(), position.end()); int maxDist = position.back() - position.front(); for (int d = 1; d <= maxDist; ++d) { int count = 1, last = position[0]; for (int i = 1; i < (int)position.size(); ++i) { if (position[i] - last >= d) { count++; last = position[i]; } } if (count < m) return d - 1; } return maxDist; }}; int main() { // Sample driver execution cout << "Execution completed successfully." << endl; return 0;} Time & Space Complexity
- Time complexity:
O(n log n + n * (max_pos - min_pos))— Sorting takes O(n log n), then up to 109 distance checks taking O(n) each. - Space complexity:
O(1)— O(1) auxiliary space.