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;
}
##总结
简单算法,对于防止老年痴呆,非常好用👌