系列综述:
目的:本系列是个人整理为了秋招面试
的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
结语:如果有帮到你的地方,就点个赞和关注一下呗,谢谢!!!
【C++】秋招&实习面经汇总篇
点此到文末惊喜↩︎
打表
面向规律
编程打表法
示例1
打表法
示例2
void printMatrixZigZag(vector<vector<int>> matrix) {
// 打印斜线
auto print_bias = [&matrix](int Ar, int Ac, int Br, int Bc, bool direction) {
if(direction) {
while(Ar!=Br+1) {
cout << matrix[Ar++][Ac--] << " ";
}
}else {
while(Br!=Ar-1) {
cout << matrix[Br--][Bc++] << " ";
}
}
};
// 主函数部分
int Ar = 0;// A点和B点的坐标
int Ac = 0;
int Br = 0;
int Bc = 0;
int endR = matrix.size()-1; // 边界
int endC = matrix[0].size()-1;
bool fromUp = false;
while(Ar != endR+1) { // 结束条件:A的行坐标为下边界值+1
print_bias(Ar,Ac,Br,Bc,fromUp);
Ar = Ac==endC?Ar+1:Ar; // A点到最后一列时,Ar开始下移
Ac = Ac==endC?Ac:Ac+1; // A点没到最后一列时,Ac右移
Bc = Br==endR?Bc+1:Bc;
Br = Br==endR?Br:Br+1;
fromUp = !fromUp; // 方向交叉
}
}
template<typename T>
void pirntEdage(std::vector<std::vector<T>>& my_matrix, int tR, int tC, int dR, int dC) {
if (tR == dR) { // 行相同
for (int i = tC; i <= dC; ++i) {
std::cout << my_matrix[tR][i] << ",";
}
} else if (tC == dC) { // 列相同
for (int i = tR; i <= dR; ++i) {
std::cout << my_matrix[i][tC] << ",";
}
} else { // 打印四条边
int curR = tR;
int curC = tC;
while (curC != dC) {
std::cout << my_matrix[tR][curC] << ",";
++curC;
}
while (curR != dR) {
std::cout << my_matrix[curR][dC] << ",";
++curR;
}
while (curC != tC) {
std::cout << my_matrix[dR][curC] << ",";
--curC;
}
while (curR != tR) {
std::cout << my_matrix[curR][tC] << ",";
--curR;
}
}
}
template<typename T>
void spiralOrderPrint(std::vector<std::vector<T>>& my_matrix) {
int tR = 0;
int tC = 0;
int dR = my_matrix.size() - 1;
int dC = my_matrix[0].size() - 1;
while (tR <= dR && tC <= dC) {
pirntEdage(my_matrix, tR++, tC++, dR--, dC--);
}
}
void Rotate(vector<vector<int>> matrix) {
// 旋转一圈
auto rotate_edge = [&matrix](int a, int b, int c, int d){
int tmp = 0;
// 每一圈一共执行d-b次
// 每次顺时针交互对应的四个元素
for (int i = 0; i < d-b; ++i) {
tmp = matrix[a][b+i];
matrix[a][b+i] = matrix[c-i][b];
matrix[c-i][b] = matrix[c][d-i];
matrix[c][d-i] = matrix[a+i][d];
matrix[a+i][d] = tmp;
}
};
// 主逻辑
int a = 0;
int b = 0;
int c = matrix.size()-1;
int d = matrix[0].size()-1;
while (a < c) {
rotate_edge(matrix, ++a, ++b, --c, --d);
}
}
点此跳转到首行↩︎