一步一步寫演算法(之 回數)

2021-08-26 10:43:45 字數 1405 閱讀 6727

回數的概念比較好玩,就是說有這麼乙個字串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)

return 1;

}int isanagramornot(const char* str, int length)

return 1;

}

上面的方法只是傳統上的比較方法,如果面試的考官說用遞迴的方法怎麼計算呢?朋友們可以再試一下。

int _isanagramornot(const char* str, int length)

int isanagramornot(const char* str, int length)

那麼,我們把難度再提高一些,如果比較的資料很多,有1000萬個,那麼怎麼利用多核程式設計提高資料的處理速度呢?

int _isanagramornot(const char* str, int start, int end, int length)

return 1;

}int isanagramornot(const char* str, int length)

; 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 for

for(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)所有演算法的執行都是以正確性和健壯性為前提的,必須建立在充分測試的基礎之上

一步一步寫演算法(之「數星星」)

學過程式設計的朋友都知道,當初為了學習程式語言中的各種語法結構,我們要試著解決各種各樣奇怪的題目。其中 數星星 就似乎其中的一種。什麼是 數星星 呢?就是列印各種形狀的 正三角 倒三角 菱形等等。本篇部落格純粹為了紀念我們逝去的歲月。a 正三角 void star 1 printf n b 倒三角 ...

一步一步寫演算法(之「數星星」)

原文 一步一步寫演算法 之 數星星 學過程式設計的朋友都知道,當初為了學習程式語言中的各種語法結構,我們要試著解決各種各樣奇怪的題目。其中 數星星 就似乎其中的一種。什麼是 數星星 呢?就是列印各種形狀的 正三角 倒三角 菱形等等。本篇部落格純粹為了紀念我們逝去的歲月。a 正三角 void star...

一步一步寫演算法(之 A 演算法)

在前面的部落格當中,其實我們已經討論過尋路的演算法。不過,當時的示例圖中,可選的路徑是唯一的。我們挑選乙個演算法,就是說要把這個唯一的路徑選出來,怎麼選呢?當時我們就是採用窮盡遞迴的演算法。然而,今天的情形有點不太一樣了。在什麼地方呢?那就是今天的路徑有n條,這條路徑都可以達到目的地,然而我們在挑選...