1822.数组元素积的符号
题目描述
已知函数 signFunc(x) 将会根据 x 的正负返回特定值:
如果 x 是正数,返回 1 。
如果 x 是负数,返回 -1 。
如果 x 是等于 0 ,返回 0 。
给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。
返回 signFunc(product) 。
示例图片
解题思路
方法:根据题目要求,首先想到的是将数组循环连乘,得到的总数判断是否大于0,小于0,或者等于0,但是提交后会发现会越界。
于是可以换种思路,因为最终返回的结果只与连乘之后的符号有关,那可以在每次循环相乘的时候,只保留结果的符号,让结果只存在-1,1,0这三个数,问题就能够得到解决,当然,定义一个记录负数个数的值,最后判断这个值是奇数还是偶数来返回结果,这种方法也是可以的。
代码
int arraySign(int* nums, int numsSize){
int product=1;
for(int i=0;i<numsSize;i++){
product*=nums[i];
if(product<0){ product=-1; }
else if(product>0){ product=1; }
else return 0;
}
return product;
}