1. Brute Force — Full Permutation Search
Intuition
Generate all possible assignments of mice to holes via backtracking or permutation algorithms. For each permutation, compute the maximum distance any mouse traveled. Return the minimum maximum distance.
When to apply: When N <= 8 for verification.
Algorithm
- Step 1: Generate all permutations of indices 0 to N-1 for holes.
- Step 2: For each permutation, calculate curMax = max(|mice[i] - holes[perm[i]]|).
- Step 3: Track min across all permutations.
- Step 4: Return global minimum.
#include <iostream>#include <vector>#include <cmath>#include <algorithm> using namespace std; class Solution {public: int miceToHoles(vector<int>& mice, vector<int>& holes) { int n = mice.size(); vector<int> p(n); for (int i = 0; i < n; ++i) p[i] = i; int minMaxDist = 1e9; do { int curMax = 0; for (int i = 0; i < n; ++i) { curMax = max(curMax, abs(mice[i] - holes[p[i]])); } minMaxDist = min(minMaxDist, curMax); } while (next_permutation(p.begin(), p.end())); return minMaxDist; }}; int main() { Solution sol; vector<int> mice = {4, -4, 2}; vector<int> holes = {4, 0, 5}; cout << "Min time: " << sol.miceToHoles(mice, holes) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(N! * N)— Generates all N! permutations and checks N pairs per permutation. - Space complexity:
O(N)— Recursion stack and permutation storage of size N.
Why Brute Force Doesn't Scale:
With N = 105, N! is astronomical. Sorting in O(N log N) runs in ~20ms.
For N = 100,000: O(N log N) requires ~1.7 * 106 comparisons, executing in under 30ms.