1822. 数组元素积的符号

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

    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值