Problem
Standardization rescales a feature so it has mean 0 and standard deviation 1, which many models (and gradient descent) work best with:
z = (x - mean) / std
Use the population standard deviation: std = √(Σ(x - mean)² / n). If std is 0 (all values equal), return 0 for every value.
Implement z_scores(values).
Input
values: The values of one feature.
Output
Return the z-score of each value, in the same order.
Constraints
1 ≤ length ≤ 10,000
-1,000,000 ≤ each value ≤ 1,000,000
Examples
Input:
values = [2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0]
Expected output:
expected = [-1.5, -0.5, -0.5, -0.5, 0.0, 0.0, 1.0, 2.0]
Input:
std::vector<double> values = {2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};
Expected output:
std::vector<double> expected = {-1.5, -0.5, -0.5, -0.5, 0.0, 0.0, 1.0, 2.0};
Input:
double[] values = new double[] {2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};
Expected output:
double[] expected = new double[] {-1.5, -0.5, -0.5, -0.5, 0.0, 0.0, 1.0, 2.0};
Explanation
The mean is 40 / 8 = 5 and the population standard deviation is √(32 / 8) = 2, so 2 → (2 - 5) / 2 = -1.5, 4 → -0.5, 5 → 0, 7 → 1 and 9 → 2. Result: [-1.5, -0.5, -0.5, -0.5, 0, 0, 1, 2].
Input:
values = [3.0, 3.0]
Expected output:
expected = [0.0, 0.0]
Input:
std::vector<double> values = {3.0, 3.0};
Expected output:
std::vector<double> expected = {0.0, 0.0};
Input:
double[] values = new double[] {3.0, 3.0};
Expected output:
double[] expected = new double[] {0.0, 0.0};
Explanation
Both values equal the mean, so the standard deviation is 0 and both z-scores are 0.
How to approach it
Try on your own first, then open one hint at a time.
Hint 1
You need the feature’s center and spread, so start by computing the mean.
Hint 2
Use the population standard deviation, then transform each value by how far it sits from the mean.
Hint 3
When all values match, the spread is zero, so every standardized value should be zero.
Expected complexity
O(n) time, O(1) extra space
References
This challenge is adapted for CodeUtility. Follow the statement and constraints above.