题解
蜀沐
这个作者很懒,什么都没留下…
展开
-
leetcode 135. 分发糖果
题目:https://leetcode-cn.com/problems/candy/方法一: 贪心算法+两次遍历解题思路:* 规则定义: 设学生 A 和学生 B 左右相邻,A 在 BB左边;* 左规则: 当 ratings_B>ratingsA时,B 的糖比 A 的糖数量多* 右规则: 当 ratings_A>ratingsB时,AA的糖比 B 的糖数量多。步骤:先给所有的学生一颗糖从左往右遍历数组,如果右边比左边评分高,则左边糖果=右边糖果数+1从右往左遍历,原创 2021-03-19 13:04:25 · 94 阅读 · 0 评论 -
leetcode 455 分发饼干
题目:https://leetcode-cn.com/problems/assign-cookies/方法一:排序+贪心算法思路:* 局部最优达到整体最优* 小饼干先喂饱小胃口的步骤:对两个数组进行排序定义两个数字指针分别指向两个数字的开头,在两个数组范围内开始遍历如果饼干尺寸大于等于胃口的大小,孩子指针后移饼干指针每循环一次,后移一次返回孩子指针的值``int findContentChildren(vector<int>& g, vector<原创 2021-03-19 10:05:08 · 81 阅读 · 0 评论 -
leetcode 448找到所有数组中消失的数字
题目: 448. 找到所有数组中消失的数字 - 力扣(LeetCode) (leetcode-cn.com)思路一:排序分析: 找到所有在 [1, n] 范围之间没有出现在数组中的数字,将数组进行排序,然后查找前后的数相差是否为0或者1,如果不满足,则存在没有出现过的数字。尤其注意开头和最后一个元素,首元素是否为1,最后一个元素是否等于长度步骤:将数组进行排序判断首元素是不是1,不为1,就将【1,nums[0]】之间的数存入数组遍历数组,判断前后元素是不是相差0或1,不是,就将两个元原创 2020-12-02 21:43:58 · 149 阅读 · 0 评论 -
leetcode 56 合并区间
题目: 56. 合并区间 - 力扣(LeetCode) (leetcode-cn.com)思路一:排序+容器分析:先按左端点进行排序,然后比较当前区间的左端点和前一个区间的右端点进行比较,如果当前区间的左端点比前一个区间的大,则没有重合,如果比之小,就会重合步骤:定义一个二维数组,存放结果对数组按照左端点进行升序排列遍历数组元素如果是第一个元素,则加入结果数组,如果不是首个元素,让当前区间的左端点和结果数组里面的最后一个元素的右端点进行比较,如果比之大,就加入结果元素,反之,则就是重合,原创 2020-12-01 21:03:58 · 178 阅读 · 0 评论 -
leetcode 383 赎金信
题目: 383. 赎金信 - 力扣(LeetCode) (leetcode-cn.com)思路一:哈希表法分析:判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。用哈希表将字符串 magazines的字符的频率统计出来,然后字符串ransomNote的字符在哈希表中出现过吗,出现过就将这个字符的频率减一;步骤:定义一个哈希表用哈希表统计magazine里面的字符的频率遍历ransomNote字符串每个字符,如果字符出现在哈希表中,就将哈希表中这个字符的原创 2020-11-28 13:52:37 · 222 阅读 · 0 评论 -
leetcode 147 对链表进行插入排序
题目:https://leetcode-cn.com/problems/insertion-sort-list/submissions/思路一:双指针法分析:插入排序算法,让一个指针指向已经排好序的节点,一个指针指向要插入的节点,让要插入的节点和已经排好序的节点的值进行比较,如果相等。就让其插入到排好序的节点的前面,排好序的节点的位置改变;如果大,就往后查找,直到遇到不比它大的停止,让其插入进去;否则就其插入到排好序的节点的前面步骤:1、定义两个指针,一个slow指向头节点,一个fast指向头节点原创 2020-11-24 15:54:02 · 101 阅读 · 0 评论 -
leetcode 面试题01.04 回文字符串
题目:https://leetcode-cn.com/problems/palindrome-permutation-lcci/submissions/思路一:哈希表法分析:根据回文字符串的特点只需要满足字符串中各个相同字母的个数为偶数或者只有一个奇数,其他都为偶数步骤:1、 定义一个哈希表,2、统计各个字母的频率3、定义一个数组,将频率放入数组内4、统计数组里面奇数和偶数的个数5、如果奇数个数为1,返回true;如果奇数个数为0,且偶数的个数不为0,返回true;否则就返回false原创 2020-11-19 16:40:04 · 109 阅读 · 0 评论 -
leetcode 283移动零
题目:https://leetcode-cn.com/problems/move-zeroes/思路一:双指针法分析:将左指针指向第一个0,移动右指针,直到第一个不为零数出现,交换左右指针指向的数字,左指针向后移动,直到碰到下一个0,让右指针指向其左指针的下一个位置查找不为0的数。循环操作直到找到数组的最后一位void moveZeroes(vector& nums) { int size= nums.size(); for(int i=0;i<size;i++)原创 2020-11-19 16:01:24 · 117 阅读 · 0 评论 -
leetcode 面试题01.06 字符串压缩
题目:https://leetcode-cn.com/problems/compress-string-lcci/思路一:双指针法分析:字符串压缩的方式就是将连续出现的相同字符按照 字符 + 出现次数 压缩。如果压缩后的字符串长度变短,则返回压缩后的字符串,否则保留原来的字符串,所以我们模拟这个过程构建字符串即可步骤:定义一个变量,记录字符长的长度,定义一个字符变量,记录0号位置的元素,定义一个新字符串,用于记录压缩后的字符串,定义一个指针变量i,指向0号位置,定义一个计数器在一个指针变量i小原创 2020-11-19 10:07:45 · 199 阅读 · 0 评论 -
leetcode 239 滑动窗口最大值
题目:https://leetcode-cn.com/problems/sliding-window-maxi思路一:排序法分析:将数组的每k个数入队列,然后对其进行排序,将最大的数入数组,直到最后这么做的后果:时间超出限制vector<int> maxSlidingWindow(vector<int>& nums, int k) { deque<int>que,que1=que; vector<int&原创 2020-11-18 11:25:15 · 95 阅读 · 0 评论 -
leeetcode150 逆波兰表达式的值
题目:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/submissions/思路一:栈模拟分析:如果是数字字符串,将其转化为整型,然后4入栈;如果是运算对象,则抛出两个整数,然后进行运算;将字符串数组遍历结束后,这时栈中只剩下一个元素,就是结果,将结果弹出即可注意:1、如何将数字字符串转化为整数2、如果是负字符串,该怎么变为负整数int evalRPN(vector<string>& toke原创 2020-11-17 20:24:16 · 130 阅读 · 0 评论 -
leetcode1047
题目:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/思路一:双指针法分析:题目要求删掉相邻的重复选项,也就是判断相邻的两个字母相不相等即可,如果相等,就把这相邻的字母删掉,不相等就往后接着判断步骤:1、 求出字符串的长度2、令字符串的下标为1,3、字符串下标不超过字符串的长度,就执行循环体4、让当前字符和前一个字符相比,等于,就删掉这两个元素,同时,下标要减1,判断如果下标为0,就让下标为1原创 2020-11-17 19:09:25 · 292 阅读 · 0 评论 -
leetcode 54 螺旋矩阵
题目:https://leetcode-cn.com/problems/spiral-matrix/思路:*分析:*这道题目需要弄清楚螺旋矩阵的定义和旋转的顺序,因为是按顺时针旋转,所以对一个矩阵遍历的顺序如下图所示步骤:1、求出矩阵的高度和宽度2、定义四个变量up、down,left,right,分别表示上、下、左、右,并且赋初值3、执行循环体4、读取左上到右上的元素这一行的元素,读取结束后,让up+1并判断其值和down的大小,比之大,就结束循环,右上到右下,右下到左下,左下到右上,也原创 2020-11-13 16:38:08 · 83 阅读 · 0 评论 -
leetcode 209 长度最小的子数组
题目:https://leetcode-cn.com/problems/minimum-size-subarray-sum/思路一:暴力解法分析:要找到连续子数组的和大于指定值,以每个数组元素为子数组的开始元素,找到其和大于等于指定值的数组就停止,并记录其长度。步骤:计算数组的长度;定义一个变量用于表示连续子数组的累加和;定义一个变量用于存储每个子连续数组的个数;定义一个变量,用于存储最少的子连续数组的个数,开始值设为最大从头开始遍历数组元素,直到所有元素遍历结束从访问的数组元素开始做累加,原创 2020-11-13 11:12:43 · 114 阅读 · 0 评论 -
leetcode 27 移除元素
题目:https://leetcode-cn.com/problems/remove-element/思路一:函数法分析:题目要求删掉数组厘米那的指定数值,并返回数组的长度。这里需要了解erase()函数的用法erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first原创 2020-11-12 21:15:34 · 99 阅读 · 0 评论 -
leetcode 35 搜索插入的位置
题目:https://leetcode-cn.com/problems/search-insert-position/思路一:二分法查找(在循环体的内部查找元素分析:因为是一个有序数组,先找到中间位置,(注意,如果是偶数,中间位置选用左边的),然后用中间位置的值和目标值进行比较,如果比目标值大,就在数 组中间值左半部分找,反之,进在右半部分找;如果和目标值相等,就返回下标,直到指向右边位置的指针(low)大于指向左面位置的指针(high),就结束原创 2020-11-12 19:47:30 · 104 阅读 · 0 评论 -
new和delete的深入分析
1、说明: new new和delete是运算符,不是函数,因此执行效率高和delete是运算符,不是函数,因此执行效率高malloc和free是函数2、 new和delete运算符使用的一般格式为:用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。注意:通常情况下,一般用new出来的基础类,数组;free掉也是可以的,malloc和delete也可以配套使用;但对于 “对象”,new和del原创 2020-11-10 09:11:46 · 289 阅读 · 0 评论 -
leetcode 450 删掉二叉搜索树中的节点
题目:https://leetcode-cn.com/problems/delete-node-in-a-bst/submissions/思路一:递归法分析:要删掉二叉搜索树中的指定节点,需要找到节点的位置,如果没有找到就返回空,怎么找?如果比根节点大,就遍历右子树;否则就遍历左子树。如果节点的值等于目标值,就找到了要删掉大的节点要删掉的节点找到后有三种情况:要删掉的节点是叶子节点,直接删掉,返回空要删掉的节点有左孩子或者有孩子,将左孩子或者右 孩子返回要删掉的节点有左孩子和右孩子,将左原创 2020-11-08 22:28:24 · 156 阅读 · 0 评论 -
leetcode701二叉搜索树的插入操作
题目:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/submissions/思路一:递归(函数有返回值)分析:二叉搜索树要插入一个新值, 只要遍历二叉搜索树,找到空节点插入元素就可以了;让插入的新节点的值与根节点相比,如果要插入新节点的值比较大,递归左子树,否则递归右子树;直到遇到空节点,创建新节点,将新节点返回步骤:递归三部曲:函数参数和返回值因为要插入新值,参数为根节点和值; 可以利用返回值完成新加入的原创 2020-11-07 21:35:51 · 161 阅读 · 0 评论 -
leetcode 108 将有序数组转换成二叉搜索树
题目:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/submissions/思路一:递归法(前序遍历创建二叉搜索树)分析:因为数组是有序的数组,所以一般取数组的中间值作为根节点的值,创建根节点,中间值左面的是左子树,右面的是右子树,对左子树和右子树按照相同的套路进行分析用两个指针(用变量表示)指向数组的头和尾,找到数组的中间值(madium),则就是树的根节点,创建根节点;然后由数组的中间值得原创 2020-11-07 17:09:18 · 75 阅读 · 0 评论 -
leetcode 538二叉搜索树转换成累加树
题目:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/submissions/思路一:递归分析:由题意可知: 每个节点 node 的新值等于原树中大于或等于 node.val 的值之和;二叉搜索树的特性是右子树大于根节点大于左子树又因为每个节点的新值大于原树中大于或等于当前节点值的和,所以先遍历右子树,在处理 根节点,左后遍历左子树步骤:1. 写递归函数(右中左)函数参原创 2020-11-07 14:15:16 · 99 阅读 · 0 评论 -
leetcode 235 二叉搜索树的最近公共祖先
题目:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/思路一:递归分析:二叉搜索树是有序的,根据这一个特性,如果传入节点的值在根节点的两侧,根节点一定是最近公共祖先,直接返回根节点就可,如果访问的节点是目标节点的其中之一,就返回该节点(最近公共祖先),如果目标节点的值比该节点的值大,访问右子树,如果小,访问左子树;如果上述条件不满足,返回null。查找7和9的公共祖先:先处理6,原创 2020-11-06 20:10:46 · 83 阅读 · 0 评论 -
leetcode 236二叉树的最近公共祖先
题目:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/solution/er-cha-shu-de-zui-jin-gong-gong-zu-xian-by-leetc-2/思路一:递归分析:这个题目首先想到的是能自底向上查找,就可以找到公共祖先了。所以采用后序遍历,最先处理叶子节点判断节点是不是最近的公共祖先:一个节点的左右子树分别出现p和q,或者节点是p或者q,该节点的左子树或者右子树出现p或者q;原创 2020-11-06 16:45:20 · 93 阅读 · 0 评论 -
leetcode 530 二叉搜索树的最小绝对值
题目:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/思路一:分析;由于二叉搜索树的特性,右子树方面:2>3>1。其绝对值最小值在3-1和2-1 之间产生,而左子树:1>4>5,绝对值最小值在1-4和4-5之间 产生,所以,根据中序遍历的顺序,将中序遍历的结果放进数组,然后前面的值减去后 面的,得到差值的最小值。步骤:中序遍历将节点放进数组里面;从数组开头,相邻位置原创 2020-11-05 16:12:09 · 205 阅读 · 0 评论 -
leetcode 700 二叉搜索树中的搜索
题目:https://leetcode-cn.com/problems/search-in-a-binary-search-tree/思路一:递归分析:二叉搜索树是一棵二叉树,每个节点都有以下特性:(1)大于左子树上任意一个节点的值(2)小于右子树上任意一个节点的。递归三部曲:确定函数参数和返回值参数为树的根节点,返回以目标值为根节点的子树确定终止条件节点为空或者找到目标值的节点就返回单层逻辑如果访问到的节点的值比目标值大,就访问左子树;如果比目标值小,就访问右子树。节点不原创 2020-11-05 10:33:59 · 113 阅读 · 0 评论 -
leetcode 617合并二叉树
题目:https://leetcode-cn.com/problems/merge-two-binary-trees/思路一:递归法分析:创建一颗新树,让其新树节点的值为两棵树对应节点的值的和递归三部曲;确定函数参数和返回值根据题目要求,函数参数是两个树的根节点,返回值是合并后的树的根节点确定终止条件遍历完两个数,则返回单层逻辑有三种情况,分别为遍历到的地方t1不为空t2为空,t1为空t2不为空,t1不为空t2不为空,对这三种情况分情况讨论’如果t1不为空t2为空,则创原创 2020-11-05 10:01:25 · 137 阅读 · 0 评论 -
leetcode 654 最大二叉树
题目:https://leetcode-cn.com/problems/maximum-binary-tree/思路一 :递归分析:找到数组最大值,则其值一定为根节点,创建根节点最大值左面是左子树,找到左子树最大值,创建左子树根节点,然后再找到左子树的左子树,再找到最大值,创建节点,一层一层递归下去,右子树的方式相同递归三部曲:确定函数参数和返回值数组为函数参数,返回值是根节点确定终止条件数组为空就返回单层逻辑找到数组里面的最大值和其位置然后创建根节点,里面的值为最大值创建原创 2020-11-05 09:47:41 · 101 阅读 · 0 评论 -
leetcode 404 左叶子之和
题目:https://leetcode-cn.com/problems/sum-of-left-leaves/思路一:深度优先搜索分析:找到左叶子节点,并把他们相加,就可以得到所求值怎么找左叶子节点?通过判断左叶子节点的父节点来进行判断,方式:父节点的左孩子存在,并且,左孩子的左右子节点为空,找到了左叶子节点if(root->left&&!root->left->left&&!root->left->right)步骤:前序遍历 1原创 2020-11-02 16:48:54 · 102 阅读 · 0 评论 -
leetcode 257二叉树的所有路径
题目:https://leetcode-cn.com/problems/binary-tree-paths/思路一:递归分析; 在这道题目中涉及到回溯,因为我们要把路径记录下来,需要回溯来回退一一个路径在进入另一个路径。用前序遍历,将根节点入数组,直到遇到叶子节点,这样一条路径被保存在了数组;然后将这条路径的节点转换成字符串,并保存进一个字符串数组,回溯一个路径,进入另外一条路径。前序遍历的过程:步骤:递归1、函数参数和返回值函数的参数输入的是节点,数组(path存储每一条路径的节点),数组(字原创 2020-11-02 09:16:43 · 221 阅读 · 0 评论 -
leetcode 104二叉树的深度
题目:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/思路一:广度优先遍历分析:求出树的最大深度,也就是计算树有多少层,访问每层元素,然后将层数+1,直到最后一层,即可的最大深度。int maxDepth(TreeNode* root) { int res=0; if(root==NULL) return res; queue<TreeNode*原创 2020-10-30 11:41:46 · 184 阅读 · 0 评论 -
leetcode 101 对称二叉树
题目:https://leetcode-cn.com/problems/symmetric-tree/思路一 递归(后序遍历)分析:本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。「正是因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。」确定递归函数的参数和返回值 因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左原创 2020-10-29 23:45:56 · 142 阅读 · 0 评论 -
leetcode 637.二叉树的层平均值
题目:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/思路一:广度优先搜索定义一个数组,用于保存每层的平均值,定义一个队列,用于存储 每层的节点,将根节点入队列如果队列不为空,就循环用一个变量保存当前队列的大小(每层的节点数)将队首出队列,将出队列的结点的值进行累加,将每层的节点遍结束后,算平均值,得到的平均值入数组循环结束后,返回数组vector<double> av原创 2020-10-28 16:21:55 · 268 阅读 · 0 评论 -
leetcode98验证二叉搜索树
题目:https://leetcode-cn.com/problems/validate-binary-search-tree/思路一:中序遍历中序遍历二叉树,将结点的值保存到一个数组里面;判断数组里面的元素是不是按升序排列,是,就是二叉搜索树,不是,就返回false。class Solution {public: vector<int> vec; bool isValidBST(TreeNode* root) { if原创 2020-10-27 21:17:59 · 101 阅读 · 0 评论 -
leetcode107二叉树层序遍历自下向上
题目:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/dfs-by-7qqqqqqq/思路一:广度优先搜索利用队列,从头开始遍历 ,将节点从头开始保存数组 ,反转输出即可class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<原创 2020-10-22 17:27:15 · 176 阅读 · 0 评论 -
leetcode剑指offer32-III 广度优先算法
题目:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/思路:广度优先算法利用栈(先进后出)定义两个栈,一个用于存储当前节点,一个用于存储下一层的节点判断根节点是否为零,为零就将返回空;将根节点入栈1,将标识符设置为1,(表示对栈1 内的节点进行操作)栈1、栈2不为空 执行循环体如果标识符为1,计算栈1节点的个数,将每个节点从栈中抛出,每抛出一个节点,将结点的值入一维数组,将节点的左子原创 2020-10-22 15:28:31 · 113 阅读 · 0 评论 -
leetcode剑指32-II 二叉树层序遍历
题目;https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/solution/zi-jie-ti-ku-jian-32-ii-jian-dan-cong-shang-dao-xi/思路:广度优先搜索利用队列 (先进先出)1. 先判断树是否为空,为空就返回空;2. 不为空将根节点入队列,判断队列是否为空,不为空就循环3. 计算队列的长度(得到当前层的节点数),遍历当前层的每个节点, 将原创 2020-10-22 11:47:56 · 100 阅读 · 0 评论 -
leetcode 145后序遍历的递归迭代遍历
1. 题目:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/2. 思路一:递归遍历 后序遍历的规则:左右中 ,先遍历左子树,再遍历右子树,最后遍历中间节点。 通过递归方式,一层一层直到遍历到树最左端的节点 ,将节点入数组,返回到上一 层节点,在遍历右节点。一直这样递归下去写法一:class Solution {p原创 2020-10-20 21:53:59 · 128 阅读 · 0 评论 -
leetcode94中序遍历 递归+迭代
题目; https://leetcode-cn.com/problems/binary-tree-inorder-traversal/submissions/思路一: 递归遍历中序遍历 左中右递归三要素:递归函数的参数和返回值 、确定终止的条件、确定单层递归的逻辑如果节点不为空 ,遍历左子树,直至遍历结束 将值放入数组中,然后遍历右子树写法一:class Solution {public: vector<int>vec;vector<int> inorderTr原创 2020-10-20 20:04:32 · 172 阅读 · 0 评论 -
leetcode144前序遍历的两种实现方式
题目:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/思路:使用迭代方式前序遍历是中左右,每次先处理的是根节点,那么先将根节点放入栈中,在将右孩子 放入进去,最后放入做孩子,(栈是先进后出),这样才能做到西安处理左孩子,在处理右孩子class Solution {public:vector preorderTraversal(TreeNode* root) {vectorvec;stack&原创 2020-10-20 16:33:01 · 169 阅读 · 0 评论 -
leetcode面试59-I 求滑动窗口最大值
题目:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/solution/dan-diao-dui-lie-xiang-jie-by-carlsun-2/思路一;暴力方式分析 :采用双端队列先将数组前k个元素放进队列中,将该队列赋给一个新队列,排序,将最大值求出,从1位置开始遍历数组,直到len-3结束,每次遍历的时候,将队列的头和删掉,从尾加进i+k-1位置的元素,然后将得到的元素赋给新队列进行排序,取出原创 2020-10-16 23:04:57 · 152 阅读 · 0 评论