剑指offer
剑指offer的C++题解
algsup
这个作者很懒,什么都没留下…
展开
-
[队列][滑动窗口]剑指 Offer II 041. 滑动窗口的平均值(medium)
思路用队列模拟窗口,一旦窗口内的元素超过n,则将队头出队。同时为了避免重复计算,用sum记录窗口内值的总和。原创 2022-07-16 09:32:03 · 198 阅读 · 0 评论 -
[二叉树]剑指 Offer 07. 重建二叉树(medium)
题目: 题解: 由于前序遍历和中序遍历结果都没有重复数字,所以我们根据前序遍历(根左右)和中序遍历(左根右)的特点,来划分中序数组和前序数组,然后递归处理划分后的数组即可。 题解: class Solution { public: // 递归解决:前序遍历是根左右,中序遍历是左根右,我们可以根据根来分别划分 前序数组和中序数组,然后递归处理划分的数组即可 TreeNode* buildTree(vector<int>& preorder, vector<int原创 2021-03-06 16:08:29 · 194 阅读 · 0 评论 -
[链表]剑指 Offer 06. 从尾到头打印链表(easy)
题目: 题解: 按题意模拟即可。 代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: vector<int> reversePrint(ListNode*原创 2021-03-06 15:32:02 · 171 阅读 · 0 评论 -
[模拟]剑指 Offer 05. 替换空格(easy)
题目: 题解: 按题意模拟即可。 代码如下: class Solution { public: string replaceSpace(string s) { string res=""; for(char c:s) { if(c!=' ')res+=c; else res+="%20"; } return res; } }; ...原创 2021-03-06 15:26:59 · 170 阅读 · 0 评论 -
[数组]剑指 Offer 04. 二维数组中的查找(medium)
题目: 题解: 缩小领域法:利用单调性的特点,从左下角开始搜索就行了。 代码如下: class Solution { public: // 题解:缩小领域法,从左下角开始搜索,按照单调性来缩小遍历范围 bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.empty()||matrix[0].empty())return false;原创 2021-03-06 15:16:52 · 165 阅读 · 0 评论 -
[hash]剑指 Offer 03. 数组中重复的数字(easy)
题目: 题解: 用 hashset 来存放遍历到的元素 x,若 x 在 hashset 中,则表示数字重复,则退出循环;否则将 x 添加到 hashset 中,继续遍历下一个元素。 代码如下: class Solution { public: int findRepeatNumber(vector<int>& nums) { unordered_set<int> s; int res=-1; for(auto原创 2021-03-06 15:01:08 · 169 阅读 · 0 评论 -
[bfs][dfs]剑指 Offer 13. 机器人的运动范围(medium)
题目: 题解: bfs dfs 纯模板题。 代码如下: // 四个方向数组 int dx[]={-1,0,1,0},dy[]={0,1,0,-1}; // 标记数组,防止点重复访问 bool visited[110][110]; using PII = pair<int,int>; class Solution { public: // 题解1:dfs int movingCount_1(int m, int n, int k) { memset(v原创 2021-02-03 17:10:04 · 160 阅读 · 0 评论 -
[大根堆]面试题40. 最小的k个数(easy)
题目: 题解: 大根堆模板题,维持一个大小为 k 的大根堆就可得到数组前 k 个最小数了。 代码如下: class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { if(!k)return {}; priority_q...原创 2020-03-20 00:29:31 · 429 阅读 · 0 评论 -
[双重DFS]面试题26. 树的子结构
题目: 题解: 坑点:A、B为空树,这两棵树都不相等。。。 剩下的用两层dfs解决,第一层dfs用来判断B是否是A的左子树或右子树,第二层dfs来判断B是否是A的子结构。 类似题:572. 另一个树的子树 代码如下: class Solution { public: bool isSubStructure(TreeNode* A, TreeNode* B) { i...原创 2020-03-09 18:20:41 · 268 阅读 · 0 评论 -
[回溯]面试题38. 字符串的排列(medium)
题目: 题解: 回溯的基本框架,其中索引index用来表示需要进行排列的次数,直到index==n表示我们已经生成一个排列了。 代码如下: class Solution { public: vector<bool> visit; vector<string> permutation(string s) { if(s.empty())...原创 2020-02-23 18:22:16 · 301 阅读 · 0 评论