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;
}
第二種在進行迴圈直接,先進行函式求值,賦給一個變數,再進行迴圈,使用了多一點空間,在本題中演算法效率就有了很大提升