Impossible is nothing |
|
|||
愛過知情重醉過知酒濃 花開花謝終是空 緣份不停留像春風來又走 女人如花花似夢 |
公告
日歷
統(tǒng)計
導航常用鏈接留言簿(4)隨筆分類(4)隨筆檔案(8)文章分類(77)文章檔案(91)相冊搜索最新評論
閱讀排行榜評論排行榜 |
題目是:找出01字符串中0和1出現(xiàn)的最大次數(shù).
代碼: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 那為什么不對i初始化呢?因為盡管i沒被初始化,它的初始值是隨機的,但在循環(huán)參數(shù)表里面已經(jīng)對他進行賦值,所以i的隨機值已經(jīng)被0覆蓋。 #include <iostream> void main() { char *a="010000010111101101000000000"; int max[2] = {0, 0}; int count[2] = {0, 0}; while(*a) { int index = *a - '0'; count[index] ++; count[index^1] = 0; // count[index?0:1] = 0; // count[index==0?1:0] = 0; if(count[index] > max[index]) max[index] = count[index]; a++; } std::cout << "max 0: " << max[0] << std::endl; std::cout << "max 1: " << max[1] << std::endl; } // output // max 0: 9 // max 1: 4 點評: 1. 就C字串來說,從頭到尾的遍歷不需要for,用while是最佳選擇。 2. strlen是很浪費的操作,如果非要用,對同一個不變長度的字串來說,用一個變量來存儲,然后重復使用,比重復計算strlen要好得多。 3. 對數(shù)字串來說,可以直接將字符減去'0'得到相應的數(shù)字。 4. 比較判斷其實并不比賦值省時,有時候直接賦值,比起比較后再賦值可能更有效率。更何況你的判斷條件達三條之多才決定是否需要賦值。 所以if(a[i+1]=='0'/*或'1'*/||i==strlen(a)-1)可以省掉。 5. 利用數(shù)組的下標,會給你帶來意想不到的簡潔。 6. 最后,變量沒有初始化,是算法設計的問題。如果初始條件都沒有確定,只能說明你的算法沒有想清楚。
|
![]() |
|
Copyright © 笑笑生 | Powered by: 博客園 模板提供:滬江博客 |