剑指offer
Ethan Cliff
这个作者很懒,什么都没留下…
展开
-
剑指 5.用两个栈实现队列
链接 题目 思路 push操作:把数据正常插入到stack1中 pop操作:是把stack1中的数据全部导入到stack2中以后再弹出stack2的头部,因此 如果stack2不空就直接弹出stack2的栈顶元素 否则就先把stack1的元素导入过来 模拟一下就清楚了 代码 class Solution { public: void push(int node) { stack1.push(node); } int pop() { int ret原创 2021-01-05 15:37:55 · 83 阅读 · 0 评论 -
剑指 4.根据前序遍历和中序遍历重建二叉树
链接 题目 思路 前序遍历第一个数肯定是根节点 root 然后在中序遍历中找到根节点,根节点左侧就是左子树右侧就是右子树,记录下根节点在中序遍历中位置或长度。 这样就能从前序遍历和中序遍历中分离出 左子树的前、中序遍历===> root->left 右子树的前、中序遍历===> root->right 代码 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode原创 2021-01-05 15:05:24 · 90 阅读 · 0 评论 -
剑指 3.从尾到头打印链表
链接 题目 思路 遍历一遍放到vector中,再反转一下即可 代码 class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> ArratList; ListNode *p = head; while (p) { ArratList.push_back(p->val);原创 2021-01-04 16:42:12 · 70 阅读 · 0 评论 -
剑指 2.替换空格
链接 题目 思路 字符串有足够的空余内存 先统计空格的个数 替换后的长度 = 原长度 + 空格长度 * 2 从尾部到头部开始移动 源码 class Solution { public: void replaceSpace(char *str,int length) { int spacenum = 0, len = strlen(str); for (int i = len - 1; i >= 0; i--) { if (str[i] ==原创 2021-01-04 15:46:46 · 74 阅读 · 0 评论 -
剑指 1.二维数组中的查找
题目链接 题目 思路 暴力求解不说 题目说每行每列都是递增的, 先用左下角的数和target比较 大于target的话,那么当前这一行这个数后面的数全部都大于target,所以直接去看上一行(row--) 小于target的话,就比较当前行这个数后面的数(col++) 也可以从右上角开始比较 代码 class Solution { public: bool Find(int target, vector<vector<int> > array) { in原创 2021-01-04 13:36:12 · 74 阅读 · 0 评论