Best solutions for Microsoft interview tasks. Unique Integers That Sum Up To 0
Description:
Given an integer n, return any array containing n unique integers such that they add up to 0.
Example 1:
Input: n = 5
Output: [-7,-1,1,3,4]
Explanation: These arrays also are accepted [-5,-1,1,2,3], [-3,-1,2,-2,4].
Example 2:
Input: n = 3
Output: [-1,0,1]
Example 3:
Input: n = 1
Output: [0]
Constraints:
- 1 <= n <= 1000
Solution:
This task is very simple. We don’t need to play with a random number generator. We just need to make an array of different numbers. For example sequence 012345 contains different and unique numbers. So we just generate two the same sequences of numbers and make one of them negative. For example:
[-3, -2,-1,0,1,2,3]
All numbers of this sequence are unique and sum of them = 0. This is exactly what we need. The only thing we need to check is check if the given n is odd or even. In case n is odd we will add zero to our sequence, if n is even we will not do it.
C++ code:
vector<int> solution(int n) {
vector<int> v;
v.reserve(n);
int until = n/2;
// if n is odd
if (n & 1) { v.push_back(0); }
for (int i = 1; i <= until; ++i) {
v.push_back(i); v.push_back(-i);
}
return v;
}
Another idea based on properties of the sequence. You can note that each item of the required sequence following the rule A[i] = i * 2 — n + 1
Math Observation
Actually, this rule could be derived from constructing an arithmetic sequence.
(Note that any arithmetic sequence must have unique values if the common delta is non-zero)
We need the sequence sum, so that
(a[0] + a[n-1]) * n / 2 = 0, which means a[0] + a[n-1] = 0.
Note that a[n-1] — a[0] = (n-1) * delta, which is -2 * a[0],
so we simply set delta = 2, a[0] = 1 — n
The solution code will looks like:
vector<int> solution2(int n) {
vector<int> v(n);
for (int i = 0; i < n; ++i) {
v[i] = i * 2 - n + 1;
}
return v;
}
But IMHO if you preparing to an interview it would be much easier to remember the first approach.
Repository with the full project you can find here: https://github.com/jolly-fellow/microsoft/tree/master/unique_integers_that_sum_up_to_0
Return to the table of contents.