题目:
已知函数 signFunc(x) 将会根据 x 的正负返回特定值:
如果 x 是正数,返回 1 。
如果 x 是负数,返回 -1 。
如果 x 是等于 0 ,返回 0 。
给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。
返回 signFunc(product) 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sign-of-the-product-of-an-array
解题思路:
本题较为简单,主要是考虑到不应该直接相乘再求结果,否则就会出现溢出。当数组中有0时,直接退出,product为0,不再继续运算,没有0时,考虑负号的个数就行。
代码:
Java:
class Solution {
public int arraySign(int[] nums) {
int product =1;
for(int i=0;i<nums.length;i++) {
if(nums[i]==0) {
product =0;
break;
}
product*= (nums[i]>0)?1:-1;
}
if(product==0) return 0;
if(product>0) return 1;
else return -1;
}
}
第一次击败100%,记录一下~
C++:
class Solution {
public:
int arraySign(vector<int>& nums) {
int product = 1;
for (int i = 0;i < nums.size();i++) {
if (nums[i] == 0) {
product = 0;
break;
}
if (nums[i] > 0) {
product *= 1;
}
else
{
product *= -1;
}
}
if (product == 0) return 0;
if (product > 0) return 1;
return -1;
}
其实一直有一点不懂,不是说C/C++运行速度比 其他高级编程语言要快吗?但是Java的运行时间往往比C++短是怎么回事?我看了力扣统计,总体上Java的确用时短一些。