時隔幾年,再寫傳統的簡單問題演算法,又有何不同?

2022-07-13 11:54:09 字數 885 閱讀 4791

問題一:變數交換

int swap(int &a,int &b)
利用異或操作來進行變數交換,可以省下乙個空間,即不借用第三變數。

問題二:陣列求和

//

1.一般演算法,迭代形式

int sum1(int a,int

n)

return

sum;

} //

2.減而治之,遞迴形式

int sum2(int a,int

n) //

3.分而治之,遞迴形式

int sum3(int a,int lo,int

hi)

問題求解過程更加注重 「套路」 ,注重問題本身的描述(歸納)。

mi= (lo+hi)>>2 

為脫離「遞迴基」o(1)的時間刻度而造成實際效率下降的困擾,

游標取中的操作中 使用「移位運算」而不採用「除法」,衡量了計算機底層對兩者的執行效率。

問題三:陣列反轉

//

1.減而治之,遞迴形式

int reverse1(int *a,int lo,int

hi)

//2.迭代形式

int reverse1(int *a,int lo,int

hi)

似乎,熟悉多鐘形式之間的轉化。

開始,我們為了成長,試著脫離「解決問題」的苦難開始理解「抽象」,離開迭代,學習遞迴。

後來,我們為了成熟,試著擺脫「依賴問題」的蜜糖開始追求「效率」,離開遞迴,再學迭代。

加油,我們在成長!

刪數問題(簡單的貪心演算法)

題目描述 給定乙個n位正整數a,去掉其中任意k k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數,對於給定的n位正整數a和正整數k,找出剩下數字組成的新數最小的刪數方案。例如,給定的n位正整數為a為276841,k為4,則刪數後最小的新數為21。思路 從高位到低位搜尋,若出現遞增情況 此為...

簡單的演算法問題7 加一(高精度的演算法)

此演算法均是用c 編寫 此題目均是來自計蒜客 這道題如果沒有分析清楚有多種情況絕對吃藕!陣列內存放了一些個位數字,組成乙個大數 從高位到低位 現在將這個數加 11,並輸出加一以後的結果。例如 a 2,3,1,1,4 則結果為 2,3,1,1,5 a 7,8,9 則結果為 7,9,0 第一行輸入乙個正...

演算法筆記 簡單數學問題的題解

題目描述 乙個正整數有可能可以被表示為n 109 n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入格式 乙個正整數。輸出格式 輸出符合題目描述的全部正整數序列,每行乙個序列,每個序列都從該序列...