C语言/771.宝石与石头

先上题目


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

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


 第一种 :耗时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;
}    
第二种在进行循环直接,先进行函数求值,赋给一个变量,再进行循环,使用了多一点空间,在本题中算法效率就有了很大提升

猜你喜欢

转载自blog.csdn.net/qq_38959715/article/details/80813866