方**:思維要點:看題五分鐘,不會做,看解析;
先看中文站,再看國際站;
選擇最優解析;
回頭再來寫
面試四步走:
和面試官,**題目限制條件;
說說可能解,選擇最優解;
碼字;跑測試用例
不要人肉進行遞迴
找到最近最簡方法,將其拆解成可重複解決的問題(重複子問題)
數學歸納法思維
找到一種寫**的感覺!!!
void recur(int level, int param)
// process current logic
process(level, param);
// drill down
recur(level: level + 1, newparam);
// restore current status
}
c++種stringstream介紹,這裡需要注意getline
的用法;
// extract to string
#include #include #include int main ()
可能解:
遞迴求解
迭代求解
# 1. 遞迴求解
class solution
};
# 2. 迭代求解
class solution
res++;
}return res;
}};
可能解:
遞迴求解
# 1. 遞迴求解
class solution
};
可能解:
定義函式help(bottom. root. upper)
利用二叉搜尋樹中序遍歷有序性,驗證二叉搜尋樹;
# 1t
class solution
private:
bool helper(long long bottom, treenode* root, long long upper)
};
isvalidbst(root)
的定義為:如果以root為根的樹為 bst, 那麼改函式返回ture
,否則返回false
;以下為中序遞迴的模板!!!
# 2t
class solution
if (pre != nullptr && pre->val >= root->val)
pre = root;
if (!isvalidbst(root->right))
// restore current status
return true;
}};
以下會寫三種方法,其中第一種、第二種類似(同為遞迴),第三種為迭代方法;迭代方法仍舊是利用stack
模擬遞迴;
# 1.遞迴方法1
class solution
};
# 2.遞迴方法2
class solution
};
# 3. 迭代方法
class solution
return root;
}};
思路:利用前序遍歷為:[preroot, tree(preroot->left), tree(preroot->left)],中序遍歷為:[tree(inroot->left), inroot, tree(inroot->right)]的特性,設計遞迴函式mybuildtree(preorder, pre, end, il)
,其中il也就是中序遍歷中root的下標。其中不同方法:主要體現在根據根據preroot->val
找其在中序遍歷的座標不同上,以下**是利用map來記錄座標的不同看**:
class solution
return mybuildtree(preorder, 0, preorder.size() - 1, 0);
}private:
treenode* mybuildtree(vector& preorder, int pre, int end, int inl)
};
可能解:
遞迴求解的基本路子;
class solution
};
思路:由於這類題有無限解,一定是遞迴回溯方法。設計函式_generate(int left, int right, int n, string str)
,因此需要考慮以下幾點:
終止條件terminator是:括號數量,left == right
,則為符合條件的乙個;
遞迴條件:left < n, drill down,_generate(left + 1, right, n, str + '(')
遞迴條件:left > right, drill down,_generate(left, right+1, n, str + ')')
class solution
private:
void _generate(int left, int right, int n, string str)
if (left < n) _generate(left + 1, right, n, str + '(');
if (left > right) _generate(left, right + 1, n, str + ')');
}};
這個鏈結是關於stack和queue相關題目的集合——basic c++ iterative solution with detailed explanations. super easy for beginners.
極客時間-演算法訓練營-覃超
leetcode中文站
leetcode國際站 (將力扣中文鏈結,後面的-cn去掉,就是該題的國際站)
面試演算法題
前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...
面試演算法記錄
1.親和數問題 求500萬以內的所有親和數 如果兩個數a和b,a的所有真因數之和等於b,b的所有真因數之和等於a,則稱a,b是一對親和數。例如220和284,1184和1210,2620和2924。思路 220 1 2 4 71 142 sum 284 284 1 2 4 5 10 11 20 22...
面試演算法題目
看到一篇部落格,總結了各種鍊錶相關的問題,mark一下,感覺很不錯 戳我 程式設計之美 中 金剛坐飛機 問題 程式設計之美 中 瓷磚覆蓋地板 問題的擴充套件問題 程式設計之美 2.3 尋找發帖水王的擴充套件題目 尋找發帖量最多的三個id,他們發帖總數超過了帖子總數目n的1 4。參考 程式設計之美 2...