系列综述:
目的:本系列是个人整理为了秋招面试
的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
结语:如果有帮到你的地方,就点个赞和关注一下呗,谢谢!!!
【C++】秋招&实习面经汇总篇
点此到文末惊喜↩︎
暴力递归
尝试
形成一颗遍历树,并可对该树模型进行剪枝优化
同样含义
,并且数据量变小
的子问题例题:汉诺塔
// 将盘堆看做0号盘子和1~N-1号盘子,然后进行移动
void func(int N, string from, string to, string orher) {
if (N == 1) {
cout << "Move 1 from" + from + "to" + to;
} else {
// 函数调用注意形参的位置和含义
func(N-1, from, other, to); // N-1个圆盘到other上
cout << "Move" + N + " from " + from + " to " + to; // 将第N个圆盘挪到to上
func(N-1, other, to, from); // 将剩下N-1个圆盘从other挪到to上
}
}
// 主调函数
void hanoi(int n) {
if (n > 0)
func(n, "left", "right", "mid");
}
// 取出栈中的最后一个元素并返回
int func(stack<int> st) {
int result = stack.pop(); // 获取栈顶元素并弹出
if (stack.empty()) {
return result;
} else {
int bottom = func(st); // 获取最底部的元素
st.push(result); // 压入元素
return bottom; // 递归传递最低元素
}
}
void reverse(stack<int> st) {
int result = st.pop();
if (st.empty()) return ;
int i = f(st); // 取出栈中最低的元素
reverse(st); // 一直取到栈中没有元素了
st.push(i); // 再将元素压入栈
}
// 参数中带&等价于全局变量
void Process(const string &str, int index, unordered_set<string> &res, string &path) {
if (index == str.size()){
res.emplace(path);
return ;
}
// 不选择当前index字符
string no = path;
Process(str, index+1, res, no);
// 选择当前index字符
string yes = path + str[index];
Process(str, index+1, res, yes);
}
void process(string str, int i, vector<string> &res) {
if (i == str.size()) {
res.push_back(str);
}
// 如果i没有终止,i...都可以来到i位置
for (int j = i; j < str.size(); ++j) {
swap(str[i], str[j]); // 交换
process(str, i+1, res); // 递归
swap(str[i], str[j]); // 还原
}
}
点此跳转到首行↩︎