![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer部分题
chestnutllin
这个作者很懒,什么都没留下…
展开
-
剑指offer-把二叉树打印成多行
61.把二叉树打印成多行题目内容:代码及思路:以上述二叉树为例,重点是构建队列!!!#include<stdio.h>#include<vector>#include<queue>struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int ...原创 2019-07-03 11:18:31 · 85 阅读 · 0 评论 -
剑指offer-删除链表中重复的结点
50.删除链表中重复的结点题目内容:代码及思路:以图示的链表为例,最后结点值为2的指向结点值为5的结点。#include<iostream>#include<unordered_map>#include<deque>#include<string>using namespace std;struct ListNod...原创 2019-05-27 10:22:48 · 81 阅读 · 0 评论 -
剑指offer-复杂链表的复制
19.复杂链表的复制题目内容:代码及思路:分析题目,这道题的链表与单向链表不同的是,多了一个指向任意一个节点的指针。以下图的链表为例1)复制节点2)复制random连接3)拆分链表class Solution{public: RandomListNode* copyRandomList(RandomListNode* head) { map&...原创 2019-05-13 17:23:14 · 70 阅读 · 0 评论 -
剑指offer-数字在排序数组中出现的次数
31.数字在排序数组中出现的次数题目内容:代码及思路:#include<iostream>#include<vector>#include<unordered_map>using namespace std;class Solution{public: int GetNumberOfK(vector<int> data...原创 2019-05-17 13:46:23 · 53 阅读 · 0 评论 -
剑指offer-两个链表的第一个公共结点
30.两个链表的第一个公共结点题目内容:代码及思路:两个链表拥有公共结点,如图所示:那么如果两个链表拥有公共结点,那么将较长的那个链表先走两个链表长度差的距离,然后两个链表同时行进,则会在同一个地方相遇,即两个链表的下一结点相同,根据这个思路:#include<iostream>#include<vector>using namespace...原创 2019-05-17 13:26:07 · 75 阅读 · 0 评论 -
剑指offer-扑克牌顺子
39.题目内容:代码及思路:首先根据这么长的题目,可以提取出的关键信息是:1.五张牌可以看做是一个5个数字构成的数组2.大小王可以是任意数字(用0来表示)3.如果是顺子,最直观的方法就是对数据进行排序,用0去填充的空缺,如果相邻两个数字相隔若干个数字,那么只要有足够的0就可以补满空缺的位置。所以将问题就可以转为以下几个步骤:1.对数组进行排序;2.计算0的个数;3....原创 2019-05-22 14:26:03 · 142 阅读 · 0 评论 -
剑指offer-二叉树中和为某一值的路径
18.二叉树中和为某一值的路径题目内容:代码及思路:#include<iostream>#include<vector>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right;};class solution{ public: ve...原创 2019-05-13 11:38:10 · 68 阅读 · 0 评论 -
剑指offer-二叉搜索树的后序遍历序列
17.二叉搜索树的后序遍历序列题目内容:代码及思路:首先了解到二叉搜索树的特点,左节点的节点值小于父节点的值,右节点的节点值大于父节点的值。如图所示,以上图的二叉搜索树为例,后序遍历的最后一个节点为根节点,且根据二叉搜索树的结构特点可以得到,前三个数字比根节点8小,所以是根节点的左子树节点,后三个数字比根节点8大,所以是根节点的右子树节点。紧接着在分别对根节点的左子树及右子...原创 2019-05-13 11:00:10 · 77 阅读 · 0 评论 -
剑指offer-数组中的逆序对
29.数组中的逆序对题目内容:代码及思路:1.如果遍历整个数组,对数组中的所有元素两两对比,那么该算法的复杂度是O(n^2)2.利用归并排序的思想,进行拆解整合#include<iostream>#include<vector>using namespace std;class Solution{public: int Inve...原创 2019-05-17 11:09:28 · 97 阅读 · 0 评论 -
剑指offer-链表中环的入口结点
49.链表中环的入口结点题目内容:代码及思路:1)先找到环中的任意一个节点2)计算出环的长度3)设置一个指针(快指针,先走环的长度)4)设置一个慢指针跟在后面,当p1走到路口时,两人会相遇关于循环链表的建立,后面补上 ListNode* EntryNodeOfLoop(ListNode* pHead) { if (pHead == nullptr) ...原创 2019-05-26 11:01:20 · 96 阅读 · 0 评论 -
剑指offer-字符流中第一个不重复的字符
48.字符流中第一个不重复的字符题目内容:代码及思路:看到题目第一个会想到说用哈希表来做。#include<iostream>#include<unordered_map>#include<deque>#include<string>using namespace std;class Solution{public...原创 2019-05-26 09:58:27 · 86 阅读 · 0 评论 -
剑指offer-第一次只出现一次的字符
28.第一次只出现一次的字符题目内容:代码及思路:又涉及到计数的问题,因此想到的还是利用哈希表进行判断。#include<iostream>#include<string>#include<unordered_map>using namespace std;class Solution{public: int FirstNot...原创 2019-05-17 09:52:43 · 61 阅读 · 0 评论 -
剑指offer-翻转单词顺序列
38.翻转单词顺序列题目内容:代码及思路:1.先翻转句子;2.再翻转每个单词#include<iostream>#include<string>using namespace std;class Solution{public: void Reverse_core(string& str, int begin, int end)...原创 2019-05-22 10:39:50 · 113 阅读 · 0 评论 -
剑指offer-数字中只出现一次的数字
34.数字中只出现一次的数字题目内容:代码及思路:以整型数组{2,4,3,6,3,2,5,5}为例,数组中只有数字4和6只出现一次,剩下的数字都出现2次。#include<iostream>#include<vector>using namespace std;class Solution{public: void FindNumsAp...原创 2019-05-22 10:09:10 · 132 阅读 · 0 评论 -
剑指offer-二叉树的下一个结点
51.二叉树的下一个结点题目内容:代码及思路:以上图的二叉树为例(后边附上包含父节点二叉树的树创建)void buildtree(TreeNode** root) { int temp; cin >> temp; if (temp == 0) { (*root)->val = 0; (*root) = nullptr; ...原创 2019-05-27 11:20:24 · 119 阅读 · 0 评论 -
剑指offer-对称的二叉树
52.对称的二叉树题目内容:代码及思路:以上图二叉树为例,如果二叉树是对称的,则满足根节点的第一层左右子树相等,且从第三层开始,左节点的左子树等于右节点的左子树。#include<iostream>using namespace std;struct TreeNode { int val; TreeNode* left; TreeNode* righ...原创 2019-05-30 09:48:18 · 91 阅读 · 0 评论 -
剑指offer-孩子们的游戏(圆圈中最后剩下的数)
40.孩子们的游戏(圆圈中最后剩下的数)题目内容:代码及思路:因为是环状的,因此从0开始,第m个数字时(m-1)%n#include<iostream>#include<vector>using namespace std;class Solution{public: int LastRemaining_Solution(int n...原创 2019-05-23 10:15:50 · 134 阅读 · 0 评论 -
剑指offer-序列化二叉树
60.序列化二叉树题目内容:代码及思路:其中#表示的是nullptr,因此根据这个特点,反序列化为二叉树时,也是根据先根节点,后左右子树的顺序。#include<iostream>#include<vector>#include<string>using namespace std;struct TreeNode{ int ...原创 2019-07-03 10:40:19 · 83 阅读 · 0 评论 -
剑指offer-滑动窗口的最大值
62.滑动窗口的最大值题目内容:代码及思路:#include<iostream>#include<vector>#include<deque>using namespace std;class Solution {public: vector<int> maxwindow(vector<int> nums,i...原创 2019-07-08 16:02:39 · 139 阅读 · 0 评论 -
剑指offer-二叉搜索树的第k个结点
59.二叉搜索树的第k个结点题目内容:代码及思路:#include<iostream>#include<vector>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right;};class Solution {public: void ...原创 2019-07-02 14:58:16 · 73 阅读 · 0 评论 -
剑指offer-数据流中的中位数
58.题目内容:代码及思路:#include<functional>#include<queue>priority_queue<double> big_queue; //最大堆priority_queue<double, vector<double>, greater<double> > small_que...原创 2019-07-02 14:15:37 · 70 阅读 · 0 评论 -
剑指offer-矩阵中的路径
57.矩阵中的路径题目内容:代码及思路:思路:1)判断当前节点是否满足字符串该字符的要求;2)如果当前位置节点满足,判断上下左右节点的满足情况class Solution {public: bool hasPath(char* matrix, int rows, int cols, char* str) { if (matrix == nullptr || ...原创 2019-06-25 13:04:25 · 87 阅读 · 0 评论 -
剑指offer-机器人的运动范围
56.机器人的运动范围题目内容:代码及思路:关于运动坐标范围如图所示#include<iostream>using namespace std;class Solution {public: int movingCount(int threshold, int rows, int cols) { if (threshold< 0 || ro...原创 2019-06-25 10:49:12 · 77 阅读 · 0 评论 -
剑指offer-数组中重复的数字
44.数组中重复的数字题目内容:代码及思路:根据题目内容有两个重要信息:1.长度为n的数组中的数字大小在0-(n-1)范围之内2.找出第一个重复数字就可以#include<iostream>#include<unordered_map>#include<vector>using namespace std;class Sol...原创 2019-05-24 11:34:46 · 86 阅读 · 0 评论 -
剑指offer-把字符串转换成整数
43.把字符串转换成整数题目内容:代码及思路:#include<iostream>#include<string>using namespace std;class Solution{public: //为了区分非法输入设置一个全局变量设为特属于标记 //当输入为“0”。则返回0不会设置全局变量,即变量为0,否则非法时(即输入空字符...原创 2019-05-24 10:59:52 · 95 阅读 · 0 评论 -
剑指offer-不用加减乘除做加法
42.不用加减乘除做加法题目内容:代码及思路:如果不使用四则运算符号,那么可以尝试使用位运算,对两个整数进行求和。那么在位运算中1加0,0加1都为1,而0加0,1加1都为0,那么实际效果与异或的结果相同。即0与1,1与0异或都为1,0与0,1与1异或都为0.因此可以用异或来表征位运算,除此之外,对于进位操作,只有1加1时才会产生进位,所以可以对两个数进行与操作然后在左移一位,因为只...原创 2019-05-24 09:52:05 · 90 阅读 · 0 评论 -
剑指offer-按之字形顺序打印二叉树
53.按之字形顺序打印二叉树题目内容:代码及思路:由于不同行打印的顺序不同,因此我们可以设置两个栈来分别交替存放奇偶层的结点值。奇数层:从左到右偶数层:从右到左#include<iostream>#include<vector>#include<stack>using namespace std;struct TreeNod...原创 2019-05-30 10:54:05 · 90 阅读 · 0 评论 -
剑指offer-求1+2+3+...+n
41.求1+2+3+...+n题目内容:代码及思路:#include<iostream>#include<vector>using namespace std;class Solution{ typedef int(*fun)(int);public: //利用函数指针来求解 static int Solution3_terminato...原创 2019-05-23 10:38:36 · 112 阅读 · 0 评论 -
剑指offer-表示数值的字符串
47.表示数值的字符串题目内容:代码及思路:判断字符串是否表示的是数值,要满足以下几点:1.判断第一位符号位(只有第一位和含e指数的下一位可能含符号,其他不可能)2.小数点只可能出现在整数部分且只可能出现1次3.e指数后跟的是整数#include<iostream>#include<string>using namespace std;...原创 2019-05-25 14:29:08 · 127 阅读 · 0 评论 -
剑指offer-正则表达式匹配
46.正则表达式匹配题目内容:代码及思路:诸如这道题,笔试的时候经常出现类似的字符串操作。首先来理解一下题目,以题目中的栗子为例:字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配原因是对于a.a,'.'可以表示任意一个字符,因此该处的'.'可以表示a;对于ab*ac*a,对于第一个'*'表示前一个数字即b可以出现任意次(...原创 2019-05-25 13:55:06 · 120 阅读 · 0 评论 -
剑指offer-合并两个排序的链表
10.合并两个排序的链表题目内容:代码及思路:#include<iostream>using namespace std;struct Linklist{ int val; Linklist* next;};class solution{ public: Linklist* buildlist() { int num; Linkl...原创 2019-05-07 10:26:29 · 117 阅读 · 0 评论 -
剑指offer-反转链表
9.反转链表题目内容:代码及思路:#include<iostream>using namespace std;struct Linklist{ int val; Linklist* next;};class solution{ public: Linklist* buildlist() { int num; Linklist*...原创 2019-05-07 10:06:08 · 142 阅读 · 0 评论 -
剑指offer-从上往下打印二叉树
16.从上往下打印二叉树题目内容:代码及思路:题目就相当于按层打印树结构以如图所示的树结构为例输入1 2 4 0 0 5 0 0 3 6 0 0 7 0 0,输出1234567#include<iostream>#include<vector>#include<queue>using namespace std;stru...原创 2019-05-09 14:37:23 · 104 阅读 · 0 评论 -
剑指offer-栈的压入、弹出序列
15.栈的压入、弹出序列题目内容:代码及思路:#include<iostream>#include<vector>#include<stack>using namespace std;class solution{ public: bool isPoporder(vector<int> pushOrder, vect...原创 2019-05-09 13:46:05 · 81 阅读 · 0 评论 -
剑指offer-包含min函数的栈
14.包含min函数的栈题目内容:代码及思路:class MinStack{public: MinStack(){ } void push(int x) { _data.push(x); if(_min.empty()) { _min.push(x); } else { if(x>_min.top()) { x=_...原创 2019-05-09 12:58:09 · 67 阅读 · 0 评论 -
剑指offer-顺时针打印矩阵
13.顺时针打印矩阵题目内容:代码及思路:#include<iostream>#include<vector>using namespace std;class solution{ public: vector<int> printMatrix(vector<vector<int>> matrix) ...原创 2019-05-09 11:11:39 · 81 阅读 · 0 评论 -
剑指offer-链表中倒数第k个节点
8.链表中倒数第k个节点题目内容:代码及思路:#include<iostream>#include<vector>using namespace std;struct Linklist{ int val; Linklist* next;};class solution{ public: Linklist* buildlist() ...原创 2019-05-06 11:31:56 · 81 阅读 · 0 评论 -
剑指offer-调整数组顺序使奇数位于偶数前面
7.调整数组顺序使奇数位于偶数前面题目内容:代码及思路:1.用最基础的遍历的方式,即遍历数组若是奇数则取出,偶数后之。#include<iostream>#include<vector>using namespace std;class solution{public: void reorderarray(vector<int>...原创 2019-05-06 10:57:28 · 102 阅读 · 0 评论 -
剑指offer-数值的整数次方
6.数值的整数次方题目内容:代码及思路:#include<iostream>using namespace std;class solution{public: double Power(double base,int exponent) { //考虑exponent的不同情况 //exponent>0时 if (exponent >...原创 2019-05-06 10:14:00 · 106 阅读 · 0 评论 -
剑指offer-二进制中1的个数
5.二进制中1的个数题目内容:代码及思路:神奇操作:将原数减1之后会发现,从右往左,第一个1会变成0,第一个1之后的所有0变成1,而最左边到第一个1的数不变。因此将原数减1之后再和原数相与操作,就会得到最左边到第一个1位置处所有数保持不变,而剩下的数都为0。以此类推进行操作,就会依次将二进制中的1找到。以下图为例:#include<iostream>us...原创 2019-05-06 09:50:08 · 100 阅读 · 0 评论