Sign of the Product of an Array

You can achieve the desired result by understanding how the sign of a product is determined by the number of negative numbers in the array and whether there are any zeros.

  1. If there’s at least one zero in the array, the product will be zero, so you should return 0.
  2. If there are an even number of negative numbers, the product will be positive, so you should return 1.
  3. If there are an odd number of negative numbers, the product will be negative, so you should return -1.
1
2
3
4
5
6
7
8
9
class Solution:
    def arraySign(self, nums: List[int]) -> int:
        sign = 1
        for num in nums:
            if num == 0:
                return 0
            if num < 0:
                sign *= -1
        return sign

Explanation

  • The variable sign is initialized to 1 (indicating a positive product).
  • Iterate through the array. If any number is 0, return 0 immediately.
  • If any number is negative, multiply the sign by -1, effectively flipping the sign.
  • Finally, return the sign, which will either be 1 for positive or -1 for negative.

title: Sign of the Product of an Array excerpt: The basic building blocks - Product Accumulator and 3 Way Comparison in action. tags: product-accumulator three-way-comparison

There is a function signFunc(x) that returns:

1 if x is positive. -1 if x is negative. 0 if x is equal to 0.

You are given an integer array nums. Let product be the product of all values in the array nums. Return signFunc(product).

Example 1:
Input: nums = [-1,-2,-3,-4,3,2,1]
Output: 1
Explanation: The product of all values in the array is 144, and signFunc(144) = 1
Example 2:
Input: nums = [1,5,0,2,-3]
Output: 0
Explanation: The product of all values in the array is 0, and signFunc(0) = 0
Example 3:
Input: nums = [-1,1,-1,1,-1]
Output: -1
Explanation: The product of all values in the array is -1, and signFunc(-1) = -1

Constraints:

  • 1 <= nums.length <= 1000
  • -100 <= nums[i] <= 100

Implementation

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def array_sign(nums)
  product = 1
  
  nums.each do |n|
    product *= n
  end
  
  if product < 0
    return -1
  elsif product == 0
    return 0
  else
    return 1
  end
end