程序员面试金典
C++ 代码实现
algsup
这个作者很懒,什么都没留下…
展开
-
[栈]面试题 16.26. 计算器(medium)
题目: 题解: 本题是224:基本计算器的进阶版,加了一些优先级处理,其他不变。 代码如下: class Solution { public: // 预处理空格和()里面出现首个数字为负数的情况,将"(-"替换为"(0-" void replace(string &s) { int pos=s.find(" "); while(pos!=-1){ s.replace(pos,1,"");原创 2021-03-10 21:22:31 · 296 阅读 · 1 评论 -
[递归]面试题 04.06. 后继者(medium)
题目: 题解: 代码如下: class Solution { public: // 由于BST的中序遍历对应的递增数组,所以当 p->val >= root->val 时,我们需要在右子树中找后继节点 // 而当 p->val < root->val 时,我们需要在左子树中寻找后继节点 // 若能在左子树中找到后继节点,则返回后继节点,否则根节点root就是后继节点,因为这说明p的右孩子为空 TreeNode* inorderSuc原创 2021-02-02 21:38:54 · 132 阅读 · 1 评论 -
[bfs][dfs]面试题 16.19. 水域大小(medium)
题目: 题解: bfs dfs 纯模板题,思路看代码即可。 代码如下: // 方向数组,由于对角线也算水域范围,所以为8个方向 int dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1}; // 用来标记水域是否被统计过 bool flag[1010][1010]; class Solution { public: void dfs(vector<vector<int>>& land,int i,int原创 2021-02-01 17:55:29 · 229 阅读 · 0 评论 -
[回溯法]面试题 08.09. 括号(medium)
题目: 题解: 回溯法经典题型 题目中的 n 表示括号的个数,那么我们用 n 来表示左括号的个数'(',那么每使用一个左括号,同时产生一个可使用的右括号数')',可以保证不会产生无效括号。 可行解的生成:可使用的左右括号数都为0时,表示生成一个有效的括号。 代码如下: class Solution { public: vector<string> generatePa...原创 2020-03-21 00:19:21 · 459 阅读 · 0 评论 -
[二叉树]面试题 04.08. 首个共同祖先(medium)
题目: 题解: 递归三部曲,写好递归出口,递归式和处理递归结果便可得解。 首个公共祖先有三种情况: 1)p、q为以 root 为根节点的左右子树中,则 root 为祖先 2)p、q在以 root 为节点的左子树中,则 root->left 为祖先(即在右子树中找不到p、q节点) 3)p、q在以 root 为节点的右子树中,则 root->right为祖先(即在左子树中找不到p、q...原创 2020-03-21 00:12:22 · 354 阅读 · 0 评论 -
[滑动窗口]面试题 01.06. 字符串压缩(easy)
题目: 题解: 滑动窗口,当s[i]!=s[j]时,直接将j指针移动到i指针的位置,缩小窗口;当s[i]==s[j]时,i指针右移,扩大窗口。 代码如下: class Solution { public: //解法:滑动窗口,当s[i]!=s[j]时,直接将j指针移动到i指针的位置,缩小窗口;当s[i]==s[j]时,i指针右移,扩大窗口 string compressS...原创 2020-03-16 09:39:35 · 314 阅读 · 2 评论