【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
回數的概念比較好玩,就是說有這麼一個字串str, 長度為n, 現在index開始從0->index/2遍曆,那麼str[index] = str[n-1-index],那麼這種資料就是我們通常說的回數。比如說a = “a”是回數, a = “aba”是回數, a = "strarts"也是回數。因為這道題目比較簡單,所以很多公司都喜歡用它來檢查程式員的基本編程能力。不光如此,它還能考察程式員考慮問題是否周密,是否從不同角度考慮問題。
比如說,現在我們要求字串中的字元必須是小寫字母或者大寫字母,不能是其他字元,那該怎麼寫?朋友們可以試試。
int isSymbolRight(const char* str, int length){int index;char symbol;for(index = 0; index < length; index++){symbol = str[index];if(symbol >= 'a' && symbol <= 'z' || symbol >= 'A' && symbol <= 'Z') continue; return 0;}return 1;}int isAnagramOrNot(const char* str, int length){int index;if(NULL == str || 0 == length)return 0;if(!isSymbolRight(str, length))return 0;for(index = 0; index < (length >> 1); index ++){if(str[index] != str[length -1 -index])return 0;}return 1;}
上面的方法只是傳統上的比較方法,如果面試的考官說用遞迴的方法怎麼計算呢?朋友們可以再試一下。
int _isAnagramOrNot(const char* str, int length){if(0 == length || 1 == length)return 1;return (str[0] == str[length -1]) ? _isAnagramOrNot(str +1, length-2) : 0;}int isAnagramOrNot(const char* str, int length){if(NULL == str || 0 == length)return 0;if(!isSymbolRight(str, length))return 0;return _isAnagramOrNot(str, length);}
那麼,我們把難度再提高一些,如果比較的資料很多,有1000萬個,那麼怎麼利用多核編程提高資料的處理速度呢?
int _isAnagramOrNot(const char* str, int start, int end, int length){int index;char symbol;for(index = 0; index < length; index ++){if(str[start + index] != str[end -1 - index])return 0;symbol = str[start + index];if(symbol >= 'a' && symbol <= 'z' ||symbol >= 'A' && symbol <= 'Z')continue;return 0;}return 1;}int isAnagramOrNot(const char* str, int length){int index;int start[2];int end[2];int result[2] = {0};if(NULL == str || 0 == length)return 0;start[0] = 0;start[1] = length >> 2;end[0] = length;end[1] = length - (length >>2);#pragma omp parallel forfor(index = 0; index < 2; index ++)result[index] = _isAnagramOrNot(str, start[index], end[index], length >> 2);return (result[0] && result[1]) ? 1 : 0;}
總結:
(1)從上面的題目可以看出,即使很簡單的題目,也可以考察應聘者的總和能力
(2)提高演算法執行效率的途徑很多,朋友們平時課可以多多留意、多多積累
(3)所有演算法的執行都是以正確性和健壯性為前提的,必須建立在充分測試的基礎之上