2708. 一个小组的最大实力值_求解思路

from typing import List

class Solution:
    def maxStrength(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return nums[0]
        
        nums.sort()
        product = 1
        negative_count = 0
        non_zero_count = 0
        max_positive = float('-inf')
        
        for num in nums:
            if num != 0:
                product *= num
                non_zero_count += 1
                if num > 0:
                    max_positive = max(max_positive, num)
            if num < 0:
                negative_count += 1
        
        if non_zero_count == 0:
            return 0
        
        if product > 0:
            return product
        else:
            if negative_count % 2 != 0:
                # 如果乘积为负数且负数的个数为奇数,则去除绝对值最小的负数
                smallest_negative = nums[negative_count - 1]
                product //= smallest_negative
            # 如果去除负数后没有非零元素,则返回最大正数或0
            if product == 1:
                return max_positive if max_positive != float('-inf') else 0
            return product

# 测试用例
solution = Solution()
print(solution.maxStrength([0, -1]))  # 输出应为 0
print(solution.maxStrength([-3, 0, 1]))  # 输出应为 1

以下是求解思路:

  1. 特殊情况处理

    • 如果数组长度为1,直接返回该元素,因为只有一个元素时,最大实力值就是该元素本身。
  2. 排序数组

    • 对数组进行排序,以便后续处理负数和正数时更加方便。
  3. 初始化变量

    • product:用于存储所有非零元素的乘积。
    • negative_count:用于统计负数的个数。
    • non_zero_count:用于统计非零元素的个数。
    • max_positive:用于记录数组中的最大正数,初始值为负无穷大。
  4. 遍历数组

    • 对于每个元素:
      • 如果元素不为零,将其乘入 product,并增加 non_zero_count
      • 如果元素为正数,更新 max_positive
      • 如果元素为负数,增加 negative_count
  5. 处理特殊情况

    • 如果数组中没有非零元素,返回0。
  6. 计算最终结果

    • 如果 product 为正数,直接返回 product
    • 如果 product 为负数且负数的个数为奇数,去除绝对值最小的负数(因为数组已排序,负数部分的最后一个元素即为绝对值最小的负数),更新 product
    • 如果去除负数后 product 为1,返回 max_positive 或0(如果没有正数)。
    • 否则,返回 product

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值