跳至主要內容

1822. 数组元素积的符号

ITCharge大约 1 分钟

1822. 数组元素积的符号open in new window

  • 标签:数组、数学
  • 难度:简单

题目链接

题目大意

描述:已知函数 signFunc(x) 会根据 x 的正负返回特定值:

  • 如果 x 是正数,返回 1
  • 如果 x 是负数,返回 -1
  • 如果 x 等于 0,返回 0

现在给定一个整数数组 nums。令 product 为数组 nums 中所有元素值的乘积。

要求:返回 signFun(product) 的值。

说明

  • 1nums.length10001 \le nums.length \le 1000
  • 100nums[i]100-100 \le nums[i] \le 100

示例

  • 示例 1:
输入 nums = [-1,-2,-3,-4,3,2,1]
输出 1
解释 数组中所有值的乘积是 144,且 signFunc(144) = 1

解题思路

思路 1:

题目要求的是数组所有值乘积的正负性,但是我们没必要将所有数乘起来再判断正负性。只需要统计出数组中负数的个数,再加以判断即可。

  • 使用变量 minus_count 记录数组中负数个数。
  • 然后遍历数组 nums,对于当前元素 num
    • 如果为 0,则最终乘积肯定为 0,直接返回 0
    • 如果小于 0,负数个数加 1
  • 最终统计出数组中负数的个数为 minus_count
  • 如果 minus_count2 的倍数,则说明最终乘积为正数,返回 1
  • 如果 minus_count 不是 2 的倍数,则说明最终乘积为负数,返回 -1

代码

思路 1 代码:

class Solution:
    def arraySign(self, nums: List[int]) -> int:
        minus_count = 0
        for num in nums:
            if num < 0:
                minus_count += 1
            elif num == 0:
                return 0

        if minus_count % 2 == 0:
            return 1
        else:
            return -1