Problem
Features measured on different scales (age in years, income in dollars) confuse many models. Min-max normalization rescales a feature to the range 0 to 1:
x' = (x - min) / (max - min)
If all values are equal (max = min), return 0 for every value.
Implement min_max_normalize(values).
Input
values: The values of one feature.
Output
Return the normalized values in the same order.
Constraints
1 ≤ length ≤ 10,000
-1,000,000 ≤ each value ≤ 1,000,000
Examples
Input:
values = [10.0, 20.0, 15.0, 30.0]
Expected output:
expected = [0.0, 0.5, 0.25, 1.0]
Input:
std::vector<double> values = {10.0, 20.0, 15.0, 30.0};
Expected output:
std::vector<double> expected = {0.0, 0.5, 0.25, 1.0};
Input:
double[] values = new double[] {10.0, 20.0, 15.0, 30.0};
Expected output:
double[] expected = new double[] {0.0, 0.5, 0.25, 1.0};
Explanation
min = 10 and max = 30, so the range is 20: (10 - 10) / 20 = 0, (20 - 10) / 20 = 0.5, (15 - 10) / 20 = 0.25 and (30 - 10) / 20 = 1.
Input:
values = [5.0, 5.0, 5.0]
Expected output:
expected = [0.0, 0.0, 0.0]
Input:
std::vector<double> values = {5.0, 5.0, 5.0};
Expected output:
std::vector<double> expected = {0.0, 0.0, 0.0};
Input:
double[] values = new double[] {5.0, 5.0, 5.0};
Expected output:
double[] expected = new double[] {0.0, 0.0, 0.0};
Explanation
All values are equal, so the range is 0 and every value becomes 0.
How to approach it
Try on your own first, then open one hint at a time.
Hint 1
First find the smallest and largest values, since every normalized result depends on the feature’s spread.
Hint 2
Compute each output from its position relative to the minimum, using one pass to build the results after scanning extremes.
Hint 3
If every value is identical, avoid dividing by zero and return zeros for all positions.
Expected complexity
O(n) time, O(1) extra space
References
This challenge is adapted for CodeUtility. Follow the statement and constraints above.