editorial, leetcode,

Editorial Series - LeetCode 1304. Find N Unique Integers Sum up to Zero

Tahanima Chowdhury Tahanima Chowdhury May 31, 2021 · 4 mins read · Hits
Editorial Series - LeetCode 1304. Find N Unique Integers Sum up to Zero
Share this

Problem Description

In this problem, you are given an integer n where 1 <= n <= 1000. Your task is to return an integer array containing n distinct integers such that the summation of all the integers in the array is equivalent to 0.

Solution Description

What are you going to return when n = 1?
Surely, an array containing the integer 0.

What about when n = 2?
Now, you can pick any integer x and its opposite -x as the array elements since their summation will result in 0, for example, you can pick 1 and -1. Note that, x0.

So, you can come up with 2 cases:

  • n is even
    This is pretty simple. All you need to do is pick n / 2 unique integers and fill up the array with these integers and their corresponding opposites.

  • n is odd
    If you just pick 0 as one of the array elements, there remains an even number of slots to be filled up. You can then just follow the logic for the case n is even.

Solution Code

If you are stuck with the solution of this problem, check the codes below:

C++

class Solution {
public:
    vector<int> sumZero(int n) {
        vector<int> answer;
    
        if (n % 2 == 1)
            answer.push_back(0);
        
        n /= 2;
    
        for (int i = 1; i <= n; i++) {
            answer.push_back(i);
            answer.push_back(-i);
        }
    
        return answer;
    }
};

Java

class Solution {
    public int[] sumZero(int n) {
        int[] answer = new int[n];
        int index = 0;
    
        if (n % 2 == 1)
            answer[index++] = 0;
        
        n /= 2;
        
        for (int i = 1; i <= n; i++) {
            answer[index++] = i;
            answer[index++] = -i;
        }
        
        return answer;
    }
}

Python

class Solution(object):
    def sumZero(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        answer = [i for i in range(1, (n // 2) + 1)]
        answer += [-i for i in answer]

        return answer if (n % 2 == 0) else answer + [0]

C#

public class Solution {
    public int[] SumZero(int n) {
        int[] answer = new int[n];
        int index = 0;
    
        if (n % 2 == 1)
            answer[index++] = 0;
        
        n /= 2;
        
        for (int i = 1; i <= n; i++) {
            answer[index++] = i;
            answer[index++] = -i;
        }
        
        return answer;
    }
}

Ruby

# @param {Integer} n
# @return {Integer[]}
def sum_zero(n)
    answer = []
    answer << 0 if (n % 2 == 1)
    n /= 2
    n.times { |i| answer << (i + 1) << -(i + 1) }
    answer
end
Tahanima Chowdhury
Written by Tahanima Chowdhury Follow
Tahanima is the author of this blog. She is an avid contributor to open source projects and has over six years of experience working as an SQA Engineer at Therap (BD) Ltd. She also held positions at HackerRank as a Challenge Creator and Draft.dev as a Technical Writer.