![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑不断--指到烂🗡
淦
不知名唐某人
这个作者很懒,什么都没留下…
展开
-
【剑指offer】剑指 Offer 48. 最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串题目链接思路分析代码实现题目链接剑指 Offer 48. 最长不含重复字符的子字符串思路分析最长不含重复子字符串,要明确是如何判断是否重复,我们就可以采用set进行去重我们确定了使用set来进行去重,我们就需要来考虑如何选择子字符串,对于字符串选择,我们采用双指针来进行区间选择最后我们要选择如何对于处理出现重复的情况,当出现重复时,我们就计算当前区间长度,并将左指针++,然后继续进行判断代码实现set + 双指针class原创 2021-08-14 14:56:12 · 132 阅读 · 0 评论 -
【剑指offer】STLstring类的实现/C++STL/string/模拟实现
直接给出代码实现,所有需要注意的的点都在代码注释中给出//string类模拟实现class MyString{public: //构造函数 //这里传递参数为char*字符串,因为如果传string的话,构造函数还没有实行,无法传递 MyString(const char* str) { //要进行判断是否为空 if (str == nullptr) { _data = new char[1]; *_data = '\0'; } int len = st.原创 2021-08-13 10:01:41 · 134 阅读 · 0 评论 -
【剑指offer】剑指 Offer 67. 把字符串转换成整数
剑指 Offer 67. 把字符串转换成整数题目链接思路分析代码实现题目链接剑指 Offer 67. 把字符串转换成整数思路分析将字符串转成整数,我们首先要判断一个什么样的字符串算整数行首不能有空格开头必须是数字, +, -,不能有其他符号数字必须是连续的,在遇到数字后,再遇到不是数字的就可以停止例如 123word123代码实现注意代码中的注释,要注意判断边界和特殊情况class Solution {public: int strToInt(string str) {原创 2021-08-12 16:21:56 · 90 阅读 · 0 评论 -
【剑指offer】剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树题目链接思路分析代码实现题目链接剑指 Offer 07. 重建二叉树思路分析众所周知,我们知道一个二叉树的前序遍历和中序遍历 或者中序遍历和后序遍历,我们就可以通过这两组数对二叉树进行复现首先,要明确,我们先序遍历数组的第一个数就是我们根节点我们根据根节点找到终须数组的分界点,将中序数组分为左右字数两部分我们此时要对前序数组进行切分,我们对前序数组切分的大小就是我们中序遍历切分的两个数组的大小因为我们要满足中序子数组和前序子数组大小是相同的,这样才原创 2021-08-12 15:39:47 · 83 阅读 · 0 评论 -
【剑指offer】剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 11. 旋转数组的最小数字题目链接思路分析代码实现题目链接剑指 Offer 11. 旋转数组的最小数字思路分析题目中提到了递增排序 *数组,我们的DNA已经动了,就要考虑二分法进行解决既然要使用二分法,我们该怎么分,先找到左端点L,右端点R 中间节点Mif(a[m] > a[r]) 对于数组已经发生了旋转,并且小的那部分在后边,因此L = M+1if(a[m] < a[r]) 说明数组在该位置应该是递增的,所以最小值就在这一部分,但是此时a[m]也有可能是最小值,所原创 2021-08-12 13:58:07 · 96 阅读 · 0 评论 -
【剑指offer】剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值题目链接思路分析代码实现题目链接剑指 Offer 59 - I. 滑动窗口的最大值思路分析读者在阅读这道题目之前可以先阅读队列的最大值滑动窗口 最大值, 我们可以联想前面的队列最大值的题目两者思路较为相似,都是求一个滑动窗口中的最大值,我们就需要一个最大值队列,来存储窗口中的最大值当窗口开始滑动时,就相当于我们将元素添加到队列中,然后删除划走的元素,每次取队列的最大值代码实现class Solution {public:原创 2021-08-11 17:30:48 · 107 阅读 · 0 评论 -
【剑指offer】剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0~n-1中缺失的数字题目链接思路分析代码实现题目链接剑指 Offer 53 - II. 0~n-1中缺失的数字思路分析题目中提到了递增排序就意味着我们可能能够使用二分法来进行求解如果是用二分法,题目中没有给出target,但是数的范围和数组的大小是有关系的我们可以依据下标和数值来进行判断,对于一个数,他只有两种方案- 1. nums[i] == i 如果相同,说明缺失的数字还在数组的后面,因此让左指针++- 2. nums[i] != i 如果不原创 2021-08-11 16:05:11 · 113 阅读 · 0 评论 -
【剑指offer】剑指 Offer 58 - I. 翻转单词顺序
剑指 Offer 58 - I. 翻转单词顺序题目链接思路分析代码实现题目链接剑指 Offer 58 - I. 翻转单词顺序思路分析题目要求首先要去掉头尾空格如果在我们去除头尾空格之后,要对当前的字符串进行判断,排除掉全为空格的情况在去掉头尾空格之后,我们使用一个**vector< string>**来存储我们处理好的字符串,然后我们开始遍历字符串,去掉中间多余的空格,当遇到空格时,我们就将前面的字符串存储起来,最终进行反转,就能得到结果代码实现class Solut原创 2021-08-11 15:28:32 · 105 阅读 · 0 评论 -
【剑指offer】剑指 Offer 59 - II. 队列的最大值
剑指 Offer 59 - II. 队列的最大值题目链接思路分析代码实现题目链接剑指 Offer 59 - II. 队列的最大值思路分析首先需要明确的是,我们的max_value是用来得到队列中的最大值的,所以我们max_value返回的一定是队头元素,那么如果我们新入队的数变为当前队列的最大值的话,我么就要更新最大值队列例如 入队顺序为2 3 5,那么当5入队后,其前面的2 3就没有意义了,因此需要将他们出队想要将他们出队,就一定要从尾部开始判断,因此我们需要尾删,所以也决定了我们要使用d原创 2021-08-11 14:47:36 · 131 阅读 · 0 评论 -
【单例模式】单例模式C/C++实现/懒汉式/饿汉式
单例模式思路分析饿汉式代码实现懒汉式思路分析在书写单例模式之前,我们需要先理解为什么需要单例模式保证整个系统中一个类只有一个对象的实例,实现这种功能的方式就叫单例模式。意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决: 一个全局使用的类频繁地创建与销毁。何时使用: 当您想控制实例数目,节省系统资源的时候。单例模式的优点有哪些1、单例模式节省公共资源比如:大家都要喝水,但是没必要每人家里都打一口井是吧,通常的做法是整个村里打一个井就够了,大家都从原创 2021-08-10 21:25:19 · 368 阅读 · 0 评论 -
【剑指offer】剑指 Offer 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子题目链接思路分析代码实现题目链接剑指 Offer 61. 扑克牌中的顺子思路分析先对满足顺子的情况进行分析,我们先排除大小王,其他的数字能满足顺子,要求:数组中没有相同的数由于只有5个数,那么最大数减最小数间隔小于5,才能是顺子,为什么不是==4?是为了排除0 0 1 2 3的情况尽管间隔为2 但是依然能满足顺子的情况综上可述,我们先要对数组进行排序,然后统计第一位不为0的数字,并计算他们差值代码实现class Solution {原创 2021-08-10 15:30:45 · 102 阅读 · 0 评论 -
【剑指offer】剑指 Offer 29. 顺时针打印矩阵
剑指 Offer 29. 顺时针打印矩阵题目链接思路分析代码实现题目链接剑指 Offer 29. 顺时针打印矩阵思路分析手动模拟顺时针打印代码实现class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int m = matrix.size(); if(m == 0) return {}原创 2021-08-09 16:20:53 · 84 阅读 · 0 评论 -
【剑指offer】剑指 Offer 51. 数组中的逆序对
剑指 Offer 51. 数组中的逆序对题目链接思路分析代码实现题目链接剑指 Offer 51. 数组中的逆序对思路分析第一种方法是进行穷举暴力解法,但这肯定会超时因此我们可以不断划分区间,使用归并排序的思想,求解每一个小区间的逆序对,然后将它们加在一起,就能得到最终的结果,也就是总的逆序对数。[1,3,6,9] [2, 5, 8]对于3 5来说 3 < 5 但是3 大于 5之前的所有数,例如2再对于6来说,尽管6 < 8 但是6 大于8之前的所有数我们将这些数加起来,原创 2021-08-09 15:58:00 · 102 阅读 · 0 评论 -
【剑指offer】剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串题目链接思路分析代码实现题目链接剑指 Offer 46. 把数字翻译成字符串思路分析使用递归一个数如果是在[10, 25]之间的话,那么就有两种分割方法,分成 2 - 5 和 25如果该数大于25或者小于9的话,就只能切割一次例如37 分成3 - 7因此我们进行判断,如果在[10, 25]之间,就分割两次,超过该范围就分割一次,进入下一次分割2.动态规划认为dp[i]就代表前i个数能够分割的次数dp[0] =1 dp[1] =1原创 2021-08-09 14:38:58 · 61 阅读 · 0 评论 -
【剑指offer】剑指 Offer 33. 二叉搜索树的后序遍历序列
剑指 Offer 33. 二叉搜索树的后序遍历序列题目链接思路分析代码实现题目链接剑指 Offer 33. 二叉搜索树的后序遍历序列思路分析对于二叉搜索树来讲,它的最大特性就是如果左右孩子存在,那么右孩子一定大于左孩子,并且按照后序遍历的规则,数组的最后一个节点就是二叉树的根节点如果能确定根节点,我们又知道左右子树的分割点,我们就能将完整的树分为左右子树,如果是一颗搜索树,那么可以得到的是右子树的每一个节点的值都大于根节点,就可以依据这个来判断是否是二叉搜索树接着按照这种方法,对左右子树继续原创 2021-08-09 12:44:56 · 75 阅读 · 0 评论 -
【剑指offer】剑指 Offer 60. n个骰子的点数
剑指 Offer 60. n个骰子的点数题目链接思路分析代码实现题目链接剑指 Offer 60. n个骰子的点数思路分析这道题目采用动态规划的思想dp[i][j]为我们i个骰子丢出点数为j的次数首先我们对于n个骰子, 出现点数的最小值就是n,最大值就是6*n先通过一个简单的例子来辅助进行理解,假设此时有3个骰子,丢出点数为8的次数 即dp[3][8]由于我们直接计算3个骰子结果出现的次数会比较困难,我们通过借助2个骰子来进行计算,如果我们已经知道2个骰子的点数假设为5,那么为了得到8我们原创 2021-08-09 10:41:38 · 83 阅读 · 0 评论 -
【剑指offer】剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈题目链接思路分析代码实现题目链接剑指 Offer 30. 包含min函数的栈思路分析题目中明确要求push, pop, min的时间复杂度是O(1),如果我们仅使用一个栈的话,在求解min 的时候无法满足该要求,因此需要使用另一个辅助栈来帮助我们进行求解因此我们需要两个栈,一个用来正常存储数据,另一个min_st用来存储最小值,当入栈数据x<=min_st.top时,将x添加到min_st中,在出栈的时候,检查栈顶元素x是否和min_st栈顶元素原创 2021-08-09 09:04:08 · 78 阅读 · 0 评论 -
【剑指offer】剑指 Offer 45. 把数组排成最小的数
剑指 Offer 45. 把数组排成最小的数题目链接思路分析代码实现题目链接剑指 Offer 45. 把数组排成最小的数思路分析这道题目的本质上就是数组进行排序,先从示例1开始观察 “10” + “2” = “102”, “2”+ “10” == “210”因此我们认为10 < 2 在排序结束后2 需要出现在10 的右侧若拼接字符串 x + y > y + x,则x > y反之,若 x + y < y + x,则 x < y;代码实现class Solu原创 2021-08-02 15:55:37 · 156 阅读 · 0 评论 -
【剑指offer】剑指 Offer 14- I. 剪绳子
剑指 Offer 14- I. 剪绳子题目链接思路分析代码实现题目链接剑指 Offer 14- I. 剪绳子思路分析这道题目是动态规划的典型题目先定义一个dp数组,dp[n]代表第n个数被调整后得到的最大值对于dp[i]来说, 有两个方面能够得到2.1 我们可以由 j* (i - j)求解 以数字6为例 可以是2 * 4, 3 * 3,不考虑1,因为将数字分解为1没有意义2.2 也可以通过i * dp[i - j] 例如 2 * dp[4], 3*dp[3]对于结果我们当然是去取他们中原创 2021-08-02 15:34:20 · 55 阅读 · 0 评论 -
【剑指offer】剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径题目链接思路分析代码实现题目链接剑指 Offer 34. 二叉树中和为某一值的路径思路分析首先是要找到一条路径,那么如何判断是一条路径了,就是当前节点的左右孩子都为空,及说明该节点就是这条路径上的最后一个节点,其次,题目还要求该路径上的值满足一个值,所以我们需要维护一个变量sum用来保存当前路径上的和。if(root->left == nullptr && root->right == nullptr &&am原创 2021-08-01 16:21:28 · 100 阅读 · 0 评论 -
【剑指offer】剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列题目链接思路分析代码实现题目链接剑指 Offer 38. 字符串的排列思路分析题目要求输出字符串的全排列,要求不能有重复的出现,因此需要考虑去重逻辑,为了更好的去重,我们需要将字符串及进行排序,并设置一个used数组作为辅助数组,再次观察题目要求,要求结果中不能有重复,因此我们只需要保证每一层所取的元素不一样就可以,对于当前层元素,如果当前元素与前一个元素相同,说明有坑你出现重复,并且如果前一个的used为false 就说明前一个已经使用过了,此时就不能使用该原创 2021-08-01 15:54:59 · 75 阅读 · 0 评论 -
【剑指offer】剑指 Offer 28. 对称的二叉树
剑指 Offer 28. 对称的二叉树题目链接思路分析代码实现题目链接剑指 Offer 28. 对称的二叉树思路分析既然是判断二叉树是否对称,我们就需要寻找二叉树对称的条件首先,如果这棵树是一颗空树,那么就一定是对称二叉树如果根节点不为空,我们就需要判断其左右子树,如果左右子树都为空,则是对称二叉树如果左右子树不为空,我们就需要比较左右子树的数值是否相等,如果相等,说明本层满足,继续向下寻找,如果不等,返回false,在比较的时候我们要注意,我们比较的是例1中的2的左孩子3 和 同层的2原创 2021-08-01 14:46:19 · 84 阅读 · 0 评论 -
【剑指offer】剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法题目链接思路分析代码实现题目链接剑指 Offer 65. 不用加减乘除做加法思路分析既然题目禁止使用加减乘除四则运算,那么我们只能考虑使用位运算来进行求解,刚开始如果没有思路,我们可以随便取一些数来找找规律观察这三组数,可以看到前两组相加都是两个数进行异或的结果,而对于第三组数,经过异或得到0111我们发现,当存在某一位上两个数都为1时,存在进位操作,所以正确的操作应该是,先计算不进位的情况,然后计算进位的结果,当进位结果不为0时,就将两者相加,重原创 2021-08-01 14:22:47 · 103 阅读 · 0 评论 -
【剑指offer】剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数题目链接思路分析代码实现题目链接剑指 Offer 40. 最小的k个数思路分析1使用优先级队列我们直接使用优先级队列来进行处理C++中,使用优先级队列需要包含头文件,优先级队列的定义如下:priority_queue<typename, container, functional>typename是数据的类型;container是容器类型,可以是vector,queue等用数组实现的容器,不能是list,默认可以用vector;原创 2021-07-31 21:23:23 · 145 阅读 · 0 评论 -
【剑指offer】剑指 Offer 55 - II. 平衡二叉树
剑指 Offer 55 - II. 平衡二叉树题目链接思路分析代码实现题目链接剑指 Offer 55 - II. 平衡二叉树思路分析在判断平衡二叉树之前,要首先搞清楚什么是平衡二叉树AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子原创 2021-07-30 18:45:49 · 67 阅读 · 0 评论 -
【剑指offer】面试题3. 数组中重复的数字
面试题3. 数组中重复的数字题目链接思路分析代码实现题目链接面试题3. 数组中重复的数字思路分析1 使用unordered_set直接使用set对数据进行去重,每准备插入一个数据,就在set中寻找该数据,若已经遇到过,说明已经出现了重复,直接返回,若未查找到,说明是新值,将其插入set2 进行原地置换题目中给出的额外信息有一个长度为n的数组,里面的数字范围都在0~n-1之间,意味着我们可以从这里出发,假如我们能够将每一个数字都放回到他的索引位置,例如2放到下标为2的位置,这样当我们以后再遇原创 2021-07-30 17:48:08 · 62 阅读 · 0 评论 -
二叉树遍历非递归C++
二叉树遍历非递归C++题目链接二叉树的前序遍历思路分析代码实现二叉树的中序遍历思路分析代码实现二叉树的后序遍历思路分析代码实现一点点题外话题目链接二叉树的前序遍历144. 二叉树的前序遍历思路分析既然要使用非递归的方式,那就必须要借助栈来进行处理,前序遍历的遍历顺序为中左右,因此我们从根节点开始遍历,将遇到的每一个节点入栈,并保存遇到的每一个节点,我们不断的去访问左子树,当访问到最后一个节点时,此时就该访问右子树,当栈不为空或当前节点不为空时,就继续进入循环代码实现/** * Defini原创 2021-07-29 17:37:26 · 669 阅读 · 0 评论 -
八大排序之堆排序C++详解/C++堆排序/堆排
八大排序之堆排序C++详解/C++堆排序/堆排题目链接思路分析代码实现题目链接912. 排序数组思路分析代码实现class Solution {public: void Swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } void adjustDown(vector<int>& nums, int root, int n)原创 2021-07-29 14:33:20 · 143 阅读 · 0 评论 -
【剑指offer】剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III题目链接思路分析代码实现题目链接剑指 Offer 32 - III. 从上到下打印二叉树 III思路分析代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), lef原创 2021-07-27 20:50:08 · 83 阅读 · 0 评论 -
【剑指offer】剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点题目链接思路分析代码实现题目链接剑指 Offer 18. 删除链表的节点思路分析既然要对链表中的节点进行删除,那么保存前一个节点是十分重要的,然后考虑下极端情况,如果删除的是第一个节点,他没有前一个节点,因此还需要一个虚拟头节点。代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L原创 2021-07-27 17:15:55 · 60 阅读 · 0 评论 -
【剑指offer】剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组题目链接思路分析代码实现题目链接剑指 Offer 66. 构建乘积数组思路分析一种通俗的解法来说就是可以使用双层暴力循环进行求解,但是这样计算会导致过高的时间复杂度。我们先计算位于i左侧的数据的乘积, 例如对于3来说,3左边就等于12 = 2 5左边就等于1234 = 24自上而下,然后计算i右侧的乘积 3的右侧就是5*4 = 20 所以返回值中4 所对应的乘积就等于左边乘右边2 * 20 = 40自下而上代码实现class Solution原创 2021-07-27 16:03:21 · 80 阅读 · 0 评论 -
【剑指offer】剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入、弹出序列题目链接思路分析代码实现题目链接剑指 Offer 31. 栈的压入、弹出序列思路分析这道题目是考察模拟栈的出栈序列,题目给出了一个压栈序列和一个出栈序列,那么可以知道,只有当出栈序列的元素等于栈顶元素时,才能够进行出栈代码实现class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& pop原创 2021-07-27 15:16:30 · 56 阅读 · 0 评论 -
【剑指offer】剑指 Offer 36. 二叉搜索树与双向链表
剑指 Offer 36. 二叉搜索树与双向链表题目链接思路分析代码实现题目链接剑指 Offer 36. 二叉搜索树与双向链表思路分析既然想变成一个排序的双向链表,其次题目中给出了一个二叉搜搜索树,那么我们遍历的方法也随之确定,要采用中序遍历,如果想要一个双向链表,那么就必须记录下前一个节点,因此还需要一个额外指针指向前一个节点,题目中还要求一个head指针指向最小元素,该节点就是链表中的第一个节点,因此判断条件就为pre == null,在每一次修改完指向关系之后,就需要更新pre的位置代码实现原创 2021-07-27 14:50:45 · 72 阅读 · 0 评论 -
【剑指offer】剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和题目链接思路分析代码实现题目链接剑指 Offer 42. 连续子数组的最大和思路分析1 使用贪心思想既然是最大和,那么就需要保存最大和我们使用sum来进行保存,然后分析极限情况,如果我们当前的数组和已经小于0了,那么就应该重新开始,因为我们在计算子数组和的时候,前面的已经为负数了,那么对结果的影响只能变差,因此就重新开始。2 动态规划我们使用dp数组来保存[0, i]之间的最大和对于求解dp[i] 有两种办法前面的和dp[i-1] + n原创 2021-07-26 15:58:08 · 66 阅读 · 0 评论 -
【剑指offer】剑指 Offer 50. 第一个只出现一次的字符
剑指 Offer 50. 第一个只出现一次的字符题目链接思路分析代码实现题目链接剑指 Offer 50. 第一个只出现一次的字符思路分析题目中要求第一个出现一次的字符,如果想要求解出现次数,那么就必须要对字符串中的字符进行计数,由于题目说明只有小写字母,我们就使用数组来模拟哈希进行计数,在得到计数的数组之后,就可以遍历原字符串,寻找第一个计数为1的字符代码实现class Solution {public: char firstUniqChar(string s) {原创 2021-07-26 15:14:31 · 124 阅读 · 0 评论 -
【剑指offer】剑指 Offer 63. 股票的最大利润
剑指 Offer 63. 股票的最大利润题目链接思路分析代码实现题目链接剑指 Offer 63. 股票的最大利润思路分析我们想要获得最大利润,则需要找到数组中的前面的数的最小值,计算最小值与当前值的差值作为利润,如果当前值比我们记录的值还要小,则更新最小值,后面就用新的最小值来计算,并将当前的利润与我们已有的利润进行比较,如果大于当前值,同样进行更新代码实现class Solution {public: int maxProfit(vector<int>& pri原创 2021-07-26 14:53:37 · 63 阅读 · 0 评论 -
【剑指offer】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面题目链接思路分析代码实现题目链接剑指 Offer 21. 调整数组顺序使奇数位于偶数前面思路分析从题目出发 需要寻找一个位于前面的偶数和位于后面的奇数,然后将两者进行交换,最终使得奇数位于偶数之前, 那么显而易见,我们需要两个指针来进行处理使用双指针,一个从前往后找偶数,一个从后往前找奇数,然后进行交换代码实现class Solution {public: vector<int> exchange(vector&l原创 2021-07-26 14:34:46 · 53 阅读 · 0 评论 -
【剑指offer】剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字题目链接思路分析代码实现题目链接剑指 Offer 39. 数组中出现次数超过一半的数字思路分析1第一种方法可以使用map结构来对出现的数字进行统计计数,然后遍历map寻找出现次数超过一半的数字就可以2为了方便理解,我们假设数据已经有序示例1中数据已经变成1 2 2 2 2 2 3 4 5可以看到2的个数是最多的,我们吧数据分为是2的和不是2的,可以相互进行抵消如图所示,最终剩下的就是数组中出现次数超过一半的数字。原数据是乱序的原创 2021-07-22 17:23:29 · 54 阅读 · 0 评论 -
【剑指offer】剑指 Offer 68 - II. 二叉树的最近公共祖先
剑指 Offer 68 - II. 二叉树的最近公共祖先题目链接思路分析代码实现题目链接剑指 Offer 68 - II. 二叉树的最近公共祖先思路分析先对情况进行分析如果一个节点在左子树,一个节点在右子树,那么就返回root节点如果两个节点都在同一个子树,那么谁在上面就选谁我们分析完情况,现在要对代码进行设计,如果找到了一个节点,那么我们就立即返回,如果没有找到,就继续向下寻找 ,可以看出是一个递归的结构首先判断当前节点是否是我们需要节点是 返回不是 向下继续寻找左右子树原创 2021-07-22 15:50:01 · 70 阅读 · 0 评论 -
【剑指offer】剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制题目链接思路分析代码实现题目链接剑指 Offer 35. 复杂链表的复制思路分析1复制链表节点先在其原有结点后复制一个新的节点,并保持val和random指针指向一致2复制随机指针将新增节点的随机指针指向原链表的随机指针指向位置的下一个节点,也就是说让复制的节点和原节点保持同样的指向关系3拆分将原链表和新链表解开,newHead为新链表的头指针,cur为原链表的头指针代码实现/*// Definition for a原创 2021-07-22 14:27:51 · 92 阅读 · 1 评论