已知函数 signFunc(x) 将会根据 x 的正负返回特定值:
如果 x 是正数,返回 1 。
如果 x 是负数,返回 -1 。
如果 x 是等于 0 ,返回 0 。
给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。
返回 signFunc(product) 。
//在做这道题目是最想到的是计算出最终结果后判断是其值的大小
//但是在多数运算情况下会出现越界
//所以只要统计符号就行了
class Solution {
public:
int arraySign(vector<int>& nums) {
int x=0,y=0,z=0;//正数个数,负数个数,0
for(int i=0;i<nums.size();i++)
{
if(nums[i]>0)
{
x++;//统计正数个数
}
if(nums[i]<0)
{
y++;//统计负数个数
}
if(nums[i]==0)
{
z++;//判断有没有0,有一个0最终的结构都是零
}
}
if(z!=0)//首先要判断是否有0,不然后面因为后面的逻辑有乱,首先排除0,避免出现有0输出结果是1的情况
{
return 0;
}
if(y&1)//再次判断奇数,使用暗卫与运算,如果是负数的个数是奇数,直接返回-1
{
return -1;
}
else //其他情况都是正数
{
return 1;
}
}
};