LeetCode每日一题 1822. 数组元素积的符号 Java

1822. 数组元素积的符号

难度简单

已知函数 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

分析:一看简答题,马上重拳出击,遍历数组求出乘积,在判断是正数、负数或0,运行测试用例正确,一键提交,错误!肯定是数值太大溢出了。

class Solution {
    public int arraySign(int[] nums) {

        int x = 1;    // 乘积
        for (int i : nums){
            x *= i;
        }

        if (x > 0){
            return 1;
        }else if (x < 0){
            return -1;
        }else {
            return 0;
        }
    }
}

 

直接在循环里面看看是否有 0 ,有 0 直接返回 0,计算数组中负数的个数,若负数的个数是偶数则返回 1,否则返回 -1;

class Solution {
    public int arraySign(int[] nums) {

        int count = 0;    // 负数计数器

        for (int n : nums){
            if (n == 0){    // 遇到 0 直接返回 0
                return 0;
            }else if (n < 0){
                count++;
            }
        }

        return count % 2 == 0? 1 : -1; 

    }
}

执行结果:

通过

显示详情

添加备注

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:40.8 MB, 在所有 Java 提交中击败了84.60%的用户

通过测试用例:76 / 76

猜你喜欢

转载自blog.csdn.net/qq_43833393/article/details/127546151
今日推荐