刷演算法題時發現的一些小貼士

2022-05-15 19:13:16 字數 1306 閱讀 8165

相加演算法是我自己定義的名字,具體問題如下:假設每次迴圈返回乙個int,第一次返回1,第二次返回2,第三次返回3,最後演算法的結果是123,如何計算?

這個 問題看似簡單其實有乙個問題,就是你並不知道迴圈的次數是多少,也就是說無法確定1乘以的究竟是10的幾次方,下面介紹兩種方法:

方法一:

用stack的思想,把每次迴圈的值都存在stack中,這樣以先進後出的性質,最後只需要每次pop出乙個值,先乘以1,再依次乘以10,100,1000即可算出123

方法二:

這個方法比較巧妙,就是令val=val*10+x;其中val初始化為0,x為每次迴圈的值。這樣的話就不需要借助額外的儲存空間了。

比如下面這段**,最後的輸出是ans,我需要ans隨著遞迴的每一層的進行都改變它的值,而且改變其真正的值,這時候就要在方法實現的時候在ans前面加上&。但是k是乙個臨時變數,在計算每一條路徑時都會有不同的值,我希望遞迴的每一層都會改變k的值,但是卻不影響上一層的遞迴,即這層遞迴結束後k還是原來上一層遞迴的值,這時候再在方法實現的時候就不需要在k之前加&

1

int mindepth(treenode*root)

9void dfs(treenode* root, int &ans, int

k) 14

if (root->left || root->right)

15 k++;

16if (root->left)

17 dfs(root->left, ans, k);

18if (root->right)

19 dfs(root->right, ans, k);

20 }

1 #include

2int

main()

3

1 #include2 sort(pairs.begin(), pairs.end(), (vector& a, vector&b) );

1 #include 2

using

namespace

std;

3void swap(int &a, int &b)

8void perm(int list, int low, int

high)

14else20}

21}22int

main()23;

25 perm(list, 0, 4

);26

return0;

27 }

自己刷leetcode時遇到的一些小問題

這裡沒有採用middli start end 2 28 原因是避免當start和end很大的時候形成溢位 29 int middle start start end 2 set.add 如果有重複值會插入失敗 返回false hashmap 可以用來遞迴記憶化儲存 找缺失數 找出現一次數都是異或的經...

gedit一些小的新發現

寫應該還有一些人正在像我一樣用gedit呢。現在vim,gedit,guide三黨還是互相瞧不起呢。我寫這一篇是想稍微交流一下gedit的一些亂七八糟的玩意,非gedit黨勿噴。有些人連一些比較基礎的也不知道呢,誠當是普及一下了。會的也勿噴。當然有頹狗zkq之類的比我明白我就不說什麼了。首先ctrl...

leetcode刷mysql遇到的一些小tips

題目是刪除重複郵箱,抄的解答 因為mysql不允許同時對乙個表delete和select聯合操作select,所以會select乙個虛擬的表出來 delete from person where id notin select need.id from select min id as id fro...