力扣代码学习日记七

本文介绍了解决1822题——计算数组元素积的符号的两种方法:一种是使用Python的reduce函数,另一种是遍历数组并根据零和负数个数确定符号。两种方法分别讨论了时间复杂度(O(n))和空间复杂度(O(1))

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem: 1822. 数组元素积的符号

思路

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

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

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

返回 signFunc(product)

解题方法

解法一:常用思路使用reduce函数计算乘积,并根据乘积的正负,使用if判断来返回相应的值

解法二:为了提高效率,实际上不需要计算完整的乘积,因为如果数组中包含零,那么乘积将会是零,返回值会是 0。如果数组中有奇数个负数,乘积将会是负数,返回值会是 -1。如果数组中有偶数个负数且没有零,那么乘积将会是正数,返回值会是 1。

复杂度

时间复杂度:

该方法通过一次遍历来判定整个数组的乘积符号,因此时间复杂度主要取决于数组 nums 的长度。设数组长度为 n,则该算法的时间复杂度为 O(n),因为它需要对数组中的每个元素进行一次操作。

空间复杂度:

该方法中,我们只使用了一个额外的变量 sign 来存储乘积的符号。这个变量的空间占用是常量级别的,不随输入数组 nums 的大小而改变。因此,空间复杂度为 O(1),也就是说它只需要一个固定的空间量,与输入的数组大小无关。

代码

解法一:

from functools import reduce
class Solution(object):
    def arraySign(self, nums):
        if not nums:  # 检查列表是否为空
            return 0

        # 使用reduce函数计算乘积,并根据乘积的正负返回相应的值
        product = reduce(lambda x, y: x * y, nums)

        if product > 0:
            return 1
        elif product < 0:
            return -1
        else:
            return 0

解法二:

class Solution(object):
    def arraySign(self, nums):
        # 初始化标记变量
        sign = 1
        
        # 遍历数组中的每个数
        for num in nums:
            # 如果数组中有0,乘积为0,直接返回0
            if num == 0:
                return 0
            # 如果数组中有负数,翻转符号标记
            elif num < 0:
                sign = -sign
        
        # 如果负数个数为偶数,sign保持为1,否则为-1
        return sign
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值