[LeetCode 1822. 数组元素积的符号] | 刷题打卡

178 阅读1分钟

theme: vue-pro highlight: zenburn

  • 掘金团队号上线,助你 Offer 临门! 点击 查看活动详情

本题核心

每天一道简单算法,防止老年痴呆~

题目描述

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

如果 x 是正数,返回 1

如果x是负数,返回 -1

如果 x 是等于 0 ,返回 0

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

返回signFunc(product)。  

示例 1:

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

示例 2:

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

示例 3:

输入:nums = [-1,1,-1,1,-1]
输出:-1
解释:数组中所有值的乘积是 -1 ,且 signFunc(-1) = -1

提示:

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

解题思路

姐法1.防止乘积溢出将正数转为1,负数转为-1.最后直接返回乘积 姐法2.直接计算负数的数量,为偶数则是正,为奇数则是负数

解题代码


public int arraySign(int[] nums) {
        int count=1;
        for(int i=0;i<nums.length;i++){
            if(nums[i]==0){
                return 0;
            }else{
                count*=(nums[i]>0?1:-1);
            }
        }
        return count;
    }

姐法2

public int arraySign(int[] nums) {
        int count = 0;
        for (int i : nums) {
            if (i == 0) {
                return 0;
            } 
            if (i < 0) {
                count ++;
            } 
        }
        return count%2==0?1:-1;
    }

##总结

简单算法,对于防止老年痴呆,非常好用👌