题目如下:
1.自己的思路解法
遍历数组,统计小于零的元素的个数cot。
如果cot为偶数,return 1;
如果cot为奇数,return -1;
如果遍历到当前数组元素为0,return 0;
2.代码实现
class Solution {
public:
int arraySign(vector<int>& nums) {
int cot = 0; //用于统计小于零的元素个数
auto ite = nums.begin();
while (ite != nums.end())
{
if (*ite == 0) return 0;
if (*ite < 0) cot++;
ite++;
}
if (cot % 2 == 0) return 1;
else return -1;
}
};
执行时间8ms,但是在每个if之后的语句加上大括号之后,执行时间变成4ms了。
class Solution {
public:
int arraySign(vector<int>& nums) {
int cot = 0;
auto ite = nums.begin();
while (ite != nums.end())
{
if (*ite == 0)
{
return 0;
}
if (*ite < 0)
{
cot++;
}
ite++;
}
if (cot % 2 == 0)
{
return 1;
}
else return -1;
}
};
两次提交的结果:
上网查了查,没什么收获......不知道是什么原因导致的。
3.他人优质代码
//消耗内存 9980Kb == 9Mb
class Solution {
private:
int signFunc(int i) {
if (i > 0) return 1;
if (i < 0) return -1;
return 0;
}
public:
int arraySign(vector<int>& nums) {
int ret = 1;
for (int i: nums) {
ret *= signFunc(i);
}
return ret;
}
};
分析:
int ret = 1;
for(int i : nums)
{
ret *= signFunc(i);
}
//二者等效
for(int i = 0; i < nums.size(); i++)
{
ret *= signFunc(nums[i]);
}
4.收获
1.当需要使用数组里每个元素的值时,可以尝试使用如下写法:
for(int i : nums)
2.以后写代码要更加谨慎,就算if后只有一条语句,大括号也尽量不要省略。