2022-3-14 1822.数组元素积的符号

本文探讨了一段C++代码的执行效率问题。通过对比两种不同的代码风格,发现使用大括号包围单行语句能显著提高执行速度。作者分享了一个数组处理的算法,详细分析了代码执行时间从8ms降低到4ms的原因,并提醒开发者在编写代码时注意细节,即使单行语句也应使用大括号以确保代码的清晰和效率。
摘要由CSDN通过智能技术生成

题目如下:

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后只有一条语句,大括号也尽量不要省略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值