![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
baimao869311
这个作者很懒,什么都没留下…
展开
-
Leetcode 34. Find First and Last Position of Element in Sorted Array 在一个有序数组中找到第一个和最后一个元素
解决思路:利用二分法来进行位置的查找,主要涉及两个函数int lower_bound(nums, target) 和 int upper_bound(nums, target); 分别找到target的第一个和最后一个位置。其中主要有一下几个方面需要注意:1)nums为空的情况;直接返回{-1, -1};2)nums中只有一个元素时,注意lower_bound和upper_bo...原创 2018-10-25 20:14:37 · 196 阅读 · 0 评论 -
Leetcode 199. Binary Tree Right Side View 从右侧观察二叉树的节点
解题思路 :优先遍历右子树节点,图中红色的节点是最右侧的节点,当后边遍历到绿色节点时,因为其深度和已遍历的右侧节点个数相同,所以这里不用加入结果中,只有其深度大于或者等于已遍历的节点的个数时,才能加入到结果中。/** * Definition for a binary tree node. * struct TreeNode { * int val; * ...原创 2018-11-27 22:05:37 · 176 阅读 · 0 评论 -
114. Flatten Binary Tree to Linked List 将二叉树转换成链表
解题思路:1)找到根节点的左子树的最右节点,然后将根节点的右子树接到前节点的右子树上,不断执行这个过程。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNo...原创 2018-11-30 17:20:02 · 135 阅读 · 0 评论 -
669. Trim a Binary Search Tree 修剪二叉搜索树
解题思路:总共分三种情况:1) 如果根节点的值在[L,R]范围内,返回根节点,但是继续修剪根节点的左子树和右子树;2)如果根节点的值小于L,由于二叉搜索树的性质,根节点的值和根节点的左子树的值肯定不在[L,R]范围内,这时候返回trim后的右子树;3)如果根节点的值大于L,由于二叉搜索树的性质,根节点的值和根节点的右子树的值肯定不在[L,R]范围内,这时候返回trim后的左子树...原创 2018-11-30 15:03:45 · 164 阅读 · 0 评论 -
Leetcode 92. Reverse Linked List II 翻转部分链表
解决思路:注意的要点是:m 可能位于头结点,所以这里临时建立一个节点,每次将cur后面的节点放到pre节点后边,这里的cur->next其实是在一直变化的,所以这里cur并不用自己更新,每次进行重链接时相当于对链表进行了遍历。/** * Definition for singly-linked list. * struct ListNode { * int...原创 2018-11-16 21:52:36 · 137 阅读 · 0 评论 -
Leetcode 84. Largest Rectangle in Histogram 柱状图的最大矩形面积
解决思路: 问题主要考察每一根柱子最大能扩多大,这个行为的实质就是找到柱子左边刚比它小的柱子的位置在哪里,以及右边刚比它小的柱子位置在哪里,为了模拟这个过程,我们可以用栈模拟这个过程。 栈里边存储的是一个递增柱子的位置,每次遇到一个比栈顶位置小的柱子,则计算栈顶位置柱子所能拓展的面积,知道最后一个柱子。class Solution {public: ...原创 2018-11-15 18:45:40 · 111 阅读 · 0 评论 -
Leetcode 24 成对的交换链表节点 Swap Nodes in Pairs
第一种解法 非递归:更新p和head的值非递归的相关代码如下://非递归代码class Solution {public: ListNode* swapPairs(ListNode* head) { if(!head || !head->next) //不需要交换 return head; L...原创 2018-10-24 20:44:04 · 147 阅读 · 0 评论 -
Leetcode 98. Validate Binary Search Tree 判断是不是搜索二叉树
解决思路:递归在bool isValidBST(TreeNode* root, TreeNode* min, TreeNode* max)函数中,min和max节点限定了root的取值范围,如果root节点的值不满足 (min,max),则返回false,在递归的过程中,不断更新 (min,max),来判断根节点和子节点是否满足关系。class Solution {public...原创 2018-10-31 19:58:43 · 94 阅读 · 0 评论 -
Leetcode 22 生成括号 Generate Parentheses
解决方案:利用递归的思想,逐步添加括号,1)生成括号的规则:只有左括号的数量大于右括号的时候,才能添加右括号;2)停止条件:当左右括号的数量相等,总的括号对数等于n时,停止递归;//用递归来生成括号class Solution {public: vector<string> generateParenthesis(int n) { ve...原创 2018-10-24 19:10:03 · 93 阅读 · 0 评论 -
Leetcode 11. 收集最多的雨水 Container With Most Water
解决方案:利用双指针法进行雨水的计算,先用第一个和最后一个柱子开始收集雨水,这时两个柱子的距离是最远的。不断收缩两个柱子之间的距离,并来收集雨水,因为在收缩过程中,柱子之间的距离不断减小,要想收集更多的雨水,柱子必须要更高。因此在收缩过程中要跳过高度不满足的柱子,然后计算新的容器的收集雨水。//收集最多的雨水class Solution {public: int max...原创 2018-10-24 17:32:57 · 281 阅读 · 0 评论 -
Leetcode 46. Permutation 全排列
解决思路:排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;全排列:当n==m时,称为全排列;比如:集合{ 1,2,3}的全排列为:{ 1 2 3}{ 1 3 2 }{ 2 1 3 }{ 2 3 1 }{ 3 2 1 }{ 3 1 2 }我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这...原创 2018-10-26 19:32:54 · 1010 阅读 · 0 评论 -
Leetcode 39 Combination Sum 组合数
解决思路:利用深搜+回溯这里需要注意两点1)为了更好的利用深搜,这里对candidates进行从大到小排序;2)由于candidates中的元素可以重复使用,所以每次深搜都从begin位置开始;3)target >= nums[i] 这个条件很重要,如果nums[i] > target,不能使得target == 0.c...原创 2018-10-26 09:18:36 · 111 阅读 · 0 评论 -
236. Lowest Common Ancestor of a Binary Tree 两个节点的最近公共祖先
解决思路:利用递归:递归函数lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)的作用是找到以root为根节点的二叉树,p和q的最近公共祖先;其他的解决方法可以利用map保存节点和父节点的映射,不过需要额外的空间。/** * Definition for a binary tree node. * str...原创 2018-11-28 20:44:54 · 158 阅读 · 0 评论