Implement 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
The problem asks to determine the sign of the product of all numbers in a given integer array. The sign can be positive (1), negative (-1), or zero (0).
The solution employs a straightforward iterative approach:
Initialization: A variable ans
is initialized to 1 (representing a positive sign).
Iteration: The code iterates through each number (v
) in the input array nums
.
Zero Check: If a number is 0, the product becomes 0, so the function immediately returns 0.
Negative Check: If a number is negative, the sign of the product flips. Therefore, ans
is multiplied by -1.
Result: After iterating through all numbers, ans
holds the final sign of the product. The function returns ans
.
The following code snippets demonstrate the solution in several programming languages:
Python:
class Solution:
def arraySign(self, nums: List[int]) -> int:
ans = 1
for v in nums:
if v == 0:
return 0
if v < 0:
ans *= -1
return ans
Java:
class Solution {
public int arraySign(int[] nums) {
int ans = 1;
for (int v : nums) {
if (v == 0) {
return 0;
}
if (v < 0) {
ans *= -1;
}
}
return ans;
}
}
C++:
class Solution {
public:
int arraySign(vector<int>& nums) {
int ans = 1;
for (int v : nums) {
if (v == 0) return 0;
if (v < 0) ans *= -1;
}
return ans;
}
};
JavaScript:
/**
* @param {number[]} nums
* @return {number}
*/
var arraySign = function(nums) {
let ans = 1;
for (let v of nums) {
if (v === 0) return 0;
if (v < 0) ans *= -1;
}
return ans;
};
Go:
func arraySign(nums []int) int {
ans := 1
for _, v := range nums {
if v == 0 {
return 0
}
if v < 0 {
ans *= -1
}
}
return ans
}
C#:
public class Solution {
public int ArraySign(int[] nums) {
int ans = 1;
foreach (int v in nums) {
if (v == 0) return 0;
if (v < 0) ans *= -1;
}
return ans;
}
}
These examples all follow the same basic logic, adapting the syntax to the specific language. They all achieve a linear time complexity and constant space complexity.