C语言/771.宝石与石头

本文探讨了在C语言编程中如何通过优化循环内的函数调用来提高算法效率。通过两个实例对比,展示了直接在循环中调用strlen函数与先计算字符串长度再进行比较的方法之间的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上题目


思路:题目不难,两重循环即可解决。

          在做这道题的时候,发现了一个细节。大概像我这样的新手都会忽视吧。一般情况下,我都习惯直接爱在循环判断里       组长度函数,觉得方便快捷。但是这样做的话,每次进行循环判定的时候都会进行一次函数求值。如果循环层数很大,或者代码里很多地方使用了这样的做法。会耗费大量的时间资源,降低算法速度。对比下面两种解法即可明白:


 第一种 :耗时12ms

int numJewelsInStones(char* J, char* S) {
    int i,j,count=0;
    for(i=0;i<strlen(J);i++){
        for(j=0;j<strlen(S);j++){
            if(J[i]==S[j]){
                count++;
            }
        }
    }
            return count;
}


第二种:耗时4ms

int numJewelsInStones(char* J, char* S) {
    int Jlen=strlen(J);
    int Slen=strlen(S);
    int i,j,count=0;
    for(i=0;i<Jlen;i++){
        for(j=0;j<Slen;j++){
            if(J[i]==S[j]){
                count++;
            }
        }
    }
            return count;
}    
第二种在进行循环直接,先进行函数求值,赋给一个变量,再进行循环,使用了多一点空间,在本题中算法效率就有了很大提升
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值