思路一:
1.首先遍历求得所有数值的乘积
2.构造函数得到特定值
感想:轻敌了,重点是直接相乘会导致超出范围
class Solution {
public int arraySign(int[] nums) {
int len =nums.length;
double sum=1;
for(int i=0;i<len;i++)
{
if(nums[i]>0)
sum=sum*1;
else if(nums[i]<0)
sum=sum*(-1);
else
{
sum=0;
break;
}
}
return signFunc(sum);
}
int signFunc(double x)
{
int y=0;
if(x<0) y=-1;
else if(x==0) y=0;
else y=1;
return y;
}
}
思路二:
直接计算负数的个数:
奇数:为-1;
偶数:为1;
如果存在0,则为0
问题:为什么内存消耗这么大?
class Solution {
public int arraySign(int[] nums) {
int len =nums.length;
int sum=0;
int zero=0;
for(int i=0;i<len;i++)
{
if(nums[i]<0)
sum++;
else if(nums[i]==0)
zero=1;
}
if(sum%2!=0) sum=-1;
else sum=1;
if(zero==1) sum=0;
return signFunc(sum);
}
int signFunc(int x)
{
int y=0;
if(x<0) y=-1;
else if(x==0) y=0;
else y=1;
return y;
}
}
思路三:
借鉴了评论区的思路
class Solution {
public int arraySign(int[] nums) {
Boolean sum=false;
for(int x:nums)
{
if(x==0)
{
return 0;
}
if(x<0)
{
sum=!sum;
}
}
return sum?-1:1;
}
}