剑指offer刷题笔记
xiaoliyu00
Talk Is Cheap, Show Me The Code'。知易行难,知行合一难
展开
-
剑指offer-刷题笔记-中难题-JZ41 数据流中的中位数
剑指offer-刷题笔记-中难题-JZ41 数据流中的中位数。原创 2022-08-17 20:06:35 · 93 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ40 最小的K个数
剑指offer-刷题笔记-中难题-JZ40 最小的K个数。原创 2022-08-17 11:33:45 · 68 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ36 二叉搜索树与双向链表
剑指offer-刷题笔记-中难题-JZ36 二叉搜索树与双向链表/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<TreeNode*> InOrderList; void inor原创 2022-05-08 14:52:24 · 375 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ34 二叉树中和为某一值的路径(二)
剑指offer-刷题笔记-中难题-JZ34 二叉树中和为某一值的路径(二)版本1-递归注意path.emplace_back(root->val)和path.push_back(root->val)的区别,如果是尾插临时对象的话,push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程class Solution {public: vector<vector<int>原创 2022-05-06 14:36:40 · 390 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ33 二叉搜索树的后序遍历序列
剑指offer-刷题笔记-中难题-JZ33 二叉搜索树的后序遍历序列版本1-本来打算用递归的方法,没有完整的写出来class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size() == 0) { return false; }else{ //根节点原创 2022-05-06 13:08:41 · 489 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ31 栈的压入、弹出序列
剑指offer-刷题笔记-中难题–JZ31 栈的压入、弹出序列版本1-自己写的,可以通过部分例题,但是由于只能从第一个元素考虑,不完善class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() != 0 && popV.size() == 0) { retu原创 2022-05-06 00:00:41 · 126 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ8 二叉树的下一个结点
剑指offer-刷题笔记-中难题-JZ8 二叉树的下一个结点版本1-暴力方法/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {原创 2022-05-02 13:09:30 · 265 阅读 · 0 评论 -
剑指offer-刷题笔记-中等题-JZ26 树的子结构
剑指offer-刷题笔记-中等题-JZ26 树的子结构没有考虑到可能出现的为空的情况,导致后面节点为空,继续访问会出现报错版本1-自己写的/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: bool HasSu原创 2022-05-02 13:08:35 · 287 阅读 · 0 评论 -
剑指offer-刷题笔记-中等题-JZ23 链表中环的入口结点
剑指offer-刷题笔记-中等题-JZ23 链表中环的入口结点版本1-自己写的,可以过,但是空间复杂度稍大,通过增加一个map,对每次访问的节点做标记,找到重复访问的节点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* EntryN原创 2022-05-02 11:36:23 · 737 阅读 · 0 评论 -
剑指offer-刷题笔记-中等题-JZ14 剪绳子
剑指offer-刷题笔记-中等题-JZ14 剪绳子使用动态规划的方法计算,首先要通过归纳法(自己手动计算出一小部分数字对应的最大值),找出每一个最优子问题的成立条件注意:vector<int> dp(n+1,0); //在本题应定义大小为n+1,因为存储1-n//vector<int> dp(n,0);报错class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 *原创 2022-04-29 21:24:57 · 147 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ7 重建二叉树
剑指offer-刷题笔记-中难题-JZ7 重建二叉树注意:通过先序遍历和中序遍历可以确定二叉树, 通过中序遍历和后续遍历可以唯一确定二叉树,通过先序遍历和后序遍历确定不了二叉树。1.通过先序遍历和中序遍历可以确定二叉树算法:1.通过先序遍历找到根节点A,再通过根节点在中序遍历的位置找出左子树,右子树2.在A的左子树中,找出左子树的根节点(先序遍历),递归进入13.在A的右子树中,找出右子树的根节点(先序遍历),递归进入1/** * Definition for binary tree *原创 2022-04-24 14:24:19 · 883 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ44 数字序列中某一位的数字
class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int findNthDigit(int n) { long long start = 1, count = 9;//0~9 10~99 100~999 i原创 2022-04-24 12:44:26 · 259 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ39 数组中出现次数超过一半的数字
版本1class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { sort(numbers.begin(), numbers.end()); int result = numbers[numbers.size()/2]; int i = 0; int count = 0; while(numbers[i] <原创 2022-04-24 12:42:48 · 86 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ52 两个链表的第一个公共结点
剑指offer-刷题笔记-简单题-JZ52 两个链表的第一个公共结点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: int GetListLength(ListNode* pHead) { int index = 0; while(pHead)原创 2022-04-24 11:53:07 · 1418 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题-JZ51 数组中的逆序对
版本1 - 自己写了一个暴力解决,时间复杂度高class Solution {public: int InversePairs(vector<int> data) { //vector<int>dp; long int dp = 0; if(data.size() == 1) { return 0; }else{ for(int i = dat原创 2022-04-23 23:33:09 · 189 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ29 顺时针打印矩阵
剑指offer-刷题笔记-简单题-JZ29 顺时针打印矩阵class Solution {public: void print(int lx, int ly, int rx, int ry, vector<vector<int>> &matrix, vector<int> &ret) { for (int j=ly; j<=ry; ++j) ret.push_back(matrix[lx][j]);//第一行原创 2022-04-23 23:21:13 · 344 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ28 对称的二叉树
剑指offer-刷题笔记-简单题-JZ28 对称的二叉树版本1-自己写的很复杂/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: TreeNode* Mirror原创 2022-04-23 23:19:48 · 241 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ15 二进制中1的个数
剑指offer-刷题笔记-简单题-JZ15 二进制中1的个数class Solution {public: int NumberOf1(int n) { int flag[32] = {1}; int count = 0; int temp; //正数 if (n >= 0) { while (n != 0) { temp = n%2; if(temp == 1) { count ++; } n = n/2原创 2022-04-23 23:18:42 · 219 阅读 · 0 评论 -
剑指offer-刷题笔记-中难题JZ4 二维数组中的查找
剑指offer-刷题笔记-中难题JZ4 二维数组中的查找容易犯错的地方,输入[[]],不能用array.size() == 0判断,可以用temp.size()==0判断,二分查找的判断条件为low<=high,不是low < highclass Solution {public: bool Find(int target, vector<vector<int> > array) { for(int i =原创 2022-04-23 22:59:31 · 274 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ82 二叉树中和为某一值的路径(一)
JZ82 二叉树中和为某一值的路径(一)版本2-利用递归调用,递归会遇到一个问题,如果想要计算某一条的路径值不好写,因为二叉树有两个方向,直接计算只能返回一个值,这里很巧妙用了减法,结果是知道的,看看每一条的路径值是否满足,自己就错在这里,一直纠结如何计算总的值。/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {publ原创 2022-04-23 11:26:39 · 702 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ81 调整数组顺序使奇数位于偶数前面(二)
剑指offer-刷题笔记-简单题-JZ81 调整数组顺序使奇数位于偶数前面(二)版本1-建立一个数组来存放最终的结果class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> reOrderArrayTw原创 2022-04-23 10:00:06 · 163 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ79 判断是不是平衡二叉树
剑指offer-刷题笔记-简单题-JZ79 判断是不是平衡二叉树class Solution {public: //获取二叉树深度 int GetTreeDepth(TreeNode* pRoot) { int depth = 0; if(pRoot == nullptr) { depth = 0; }else{ depth = max(GetTreeDept原创 2022-04-23 00:15:34 · 258 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ73 翻转单词序列
JZ73 翻转单词序列class Solution {public: string ReverseSentence(string str) { stack<string> word; if(!str.length()) { return str; }else{ string temp; for(int i = 0;i < str.lengt原创 2022-04-21 15:06:27 · 280 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ53 数字在升序数组中出现的次数
剑指offer-刷题笔记-简单题-JZ53 数字在升序数组中出现的次数版本1-顺序查找class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.size() == 0 || k > data[data.size()-1] || k < data[0]) { return 0; } //原创 2022-04-19 21:00:46 · 313 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ50 第一个只出现一次的字符
剑指offer-刷题笔记-简单题-JZ50 第一个只出现一次的字符关键在于将每一个字符出现的次数统计出来,然后按照条件返回即可,注意字符是不变的,次数不断改变,所以用字符做地址或者说索引key,利用map存储,map的key是不重复的。map的相关操作版本1 - 建立map存储class Solution {public: int FirstNotRepeatingChar(string str) { int index; map<char,int>原创 2022-04-18 15:29:23 · 244 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ42 连续子数组的最大和
版本1-class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { //int result; if(array.size() == 1) { return array[0]; }else{ int count = array[0];//从第一个数字开始累加原创 2022-04-18 10:38:27 · 599 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ32 从上往下打印二叉树
剑指offer-刷题笔记-简单题-JZ32 从上往下打印二叉树版本1实际上是先序遍历,无法做到同层版本1-自己写的递归,部分正确/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<i原创 2022-04-15 22:43:06 · 128 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ27 二叉树的镜像
剑指offer-刷题笔记-简单题-JZ27 二叉树的镜像版本1-递归是自己写的,else部分很好写,注意交换要用中间变量保存,然后一层一层向下反转,if部分开始一直报错,开始写的是下面这样,但是如果输入{},根节点为空,再访问左右子树一定报错,修改为(pRoot == nullptr),注意输入{2},{}不一样,{2}还可以访问左右子树(都为空),{}不可以访问if(pRoot->left == nullptr && pRoot->right == nullptr){原创 2022-04-14 12:15:05 · 1058 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ22 链表中倒数最后k个结点
剑指offer-刷题笔记-简单题-JZ22 链表中倒数最后k个结点class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pHead ListNode类 * @param k int整型 * @return ListNode类 */ ListNode* FindKthToTail(ListNode* pHead原创 2022-04-13 23:06:10 · 85 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ24 反转链表
剑指offer-刷题笔记-简单题-JZ24 反转链表/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNode* beforeHead = new ListN原创 2022-04-13 23:00:39 · 181 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ18 删除链表的节点
剑指offer-刷题笔记-简单题-JZ18 删除链表的节点class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param val int整型 * @return ListNode类 */ ListNode* deleteNode(ListNode* head, int v原创 2022-04-13 22:55:05 · 165 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ25 合并两个排序的链表
剑指offer-刷题笔记-简单题-JZ25 合并两个排序的链表思想是先对比,把两个链表合并到一起,注意最后可能会出现一个链表刚好结束,另一个链表还有剩余节点,因为链表是递增的,把,另一个链表的剩余值都链接到末尾版本 1是自己写的,只能通过部分例子,只是对应位置单个的对比,比如{1,3,5},{2,4,6},1与2对比,3与4对比,5,6对比,比如{1,2,3},{2,4,6}就会出问题,最开始想到这个,打算用两个循环,即当前链表和下一个链表的所有节点都对比一遍,但是时间复杂度过高。版本2这里是通过只动一原创 2022-04-13 22:39:34 · 442 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ9 用两个栈实现队列
class Solution{public: void push(int node) { stack1.push(node); } int pop() { int result; if(!stack2.empty()) { result = stack2.top(); stack2.pop(); return result;原创 2022-04-11 20:52:27 · 327 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题 JZ11 旋转数组的最小数字
剑指offer-刷题笔记-简单题-JZ11 旋转数组的最小数字class Solution {public: int minNumberInRotateArray(vector<int> rotateArray) { //最小值在左侧或者右侧 //0 (n-1)/2 n-1 int low,mid,high; int n = rotateArray.size(); low = 0; h原创 2022-04-11 20:45:00 · 281 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ6 从尾到头打印链表
剑指offer-刷题笔记-简单题-JZ6 从尾到头打印链表题解struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { ve原创 2022-04-10 20:54:56 · 1374 阅读 · 0 评论 -
剑指offer-刷题笔记-简单题-JZ5 替换空格
剑指offer-刷题笔记-简单题-JZ5 替换空格版本1不知道可以通过索引直接从string s中访问元素,建立了一个char 型数组过渡class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string replaceSpace(string s)原创 2022-04-09 23:46:51 · 288 阅读 · 0 评论