leetcode
文章平均质量分 53
chuxuezhe8483
道阻且长、行则将至
展开
-
回溯算法-组合问题
回溯算法-组合问题回溯算法框架(重点)解决一个回溯问题,实际上就是一个决策树的遍历过程。站在回溯树的一个节点上,你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。回溯算法框架result;void backtracking(路径、选择列表) { if (终止条件) { result.add(存放结果); return; } for原创 2022-04-27 21:21:48 · 256 阅读 · 0 评论 -
回溯算法-排列问题
回溯算法回溯算法框架(重点)解决一个回溯问题,实际上就是一个决策树的遍历过程。站在回溯树的一个节点上,你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。回溯算法框架result;void backtracking(路径、选择列表) { if (终止条件) { result.add(存放结果); return; } for (选择:原创 2022-04-26 16:49:57 · 251 阅读 · 0 评论 -
K个一组链表翻转+前序中序构造二叉树
25. K 个一组翻转链表给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。思路实现先反转以 head 开头的 k 个元素。将第 k + 1 个元素作为 head 递归调用 reverseKGroup 函数。将上述两个过程的结果连接起来。class Solution {public:原创 2022-04-26 10:46:36 · 141 阅读 · 0 评论 -
146. LRU 缓存(高频)
class LRUCache {public: //定义双链表 struct Node{ int key,value; Node* left ,*right; Node(int _key,int _value): key(_key),value(_value),left(NULL),right(NULL){} }*L,*R;//双链表的最左和最右节点,不存贮值。 int n; unordered_map<int原创 2022-04-05 19:25:47 · 89 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
448. 找到所有数组中消失的数字给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。思路:1、将数组元素对应的索引位置 + n2、遍历+ n后的数组,如果数组元素值小于等于0,则说明数组下标值不存在,也就是消失的数字或者将所有正数作为数组下标,置对应数组值为负值。那么,仍为正数的位置即为(未出现过)消失的数字class Solution {public:原创 2022-04-04 14:51:57 · 186 阅读 · 0 评论 -
976. 三角形的最大周长(贪心)
976. 三角形的最大周长(贪心)给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。思路三角形构成条件为任意两边之和大于第三边,组成一个充分必要条件为a+b>c,要想让三角形的周长最大,那么可以进行排序,然后去最后三个相邻元素构成局部最优解.class Solution {public: int largestPerimeter(vector<int>& nu原创 2022-04-04 14:33:46 · 594 阅读 · 0 评论 -
雨水问题(力扣)
雨水问题解题思路主要是来自labuladong的代码小抄,小透明在这里感谢大佬11. 盛最多水的容器给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器。思路:双指针算法用 left 和 right 两个指针从两端向中心收缩,一边收缩一边计算 [left, right] 之间的矩形面原创 2022-04-04 14:21:45 · 157 阅读 · 0 评论 -
股票问题汇总
股票问题汇总这篇文章是动态问题股票问题的汇总,希望可以找到一种通用的框架解决股票问题,其中还有一些别的算法可以解决,暂时就不放代码了121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路:动态规划class Solutio原创 2022-04-04 09:30:03 · 707 阅读 · 0 评论 -
双指针-链表
双指针-链表83. 删除排序链表中的重复元素给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(head == NULL) return head; auto slow = head,fast = head; while(fast!=NULL){原创 2022-04-03 19:30:29 · 382 阅读 · 0 评论 -
25. K 个一组翻转链表
25. K 个一组翻转链表难度困难给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。思路:1、先反转以 head 开头的 k 个元素。2、将第 k + 1 个元素作为 head 递归调用 reverseKGroup 函数。3、将上述两原创 2022-04-03 14:58:24 · 121 阅读 · 0 评论 -
二维数组构建力扣
二维数组构建48. 旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。思路:1、思路(操作分解) O(n^2)先沿水平翻转,再沿对角线翻转代码实现:class Solution {public: void rotate(vector<vector<int>>& matrix) {原创 2022-04-02 10:21:19 · 158 阅读 · 0 评论 -
二叉树(思路)
二叉树(思路)二叉树做题思维模型!!二叉树解题的思维模式分两类:1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。无论使用哪种思维模式,你都需要思考:如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函原创 2022-04-01 17:23:00 · 200 阅读 · 0 评论 -
双指针算法 (力扣)
双指针算法 (力扣)26. 删除有序数组中的重复项给你一个 升序排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。数组双指针快慢指针实现:让慢指针 slow 走在后面,快指针 fast 走在前面探路,找到一个不重复的元素就告诉 slow 并让 slow 前进一步。这样当 fast 指针遍历完整个数组 nums 后,nums[0..slow] 就是不重复元素class Solution {pub原创 2022-04-01 09:14:20 · 133 阅读 · 0 评论 -
1371. 每个元音包含偶数次的最长子字符串
限制:1 <= s.length <= 5 x 10^5s 只包含小写英文字母。算法:我们只需要关注 5 个字母的奇偶性,所以可以用一个长度为 2^5 的掩码表示闭区间 [0, i] 的状态。维护一个哈希表,存储第一次出现这个掩码的位置。线性扫描时,对于当前的一个掩码,用 i 减去第一次出现这个掩码的位置,就能得到一个以 i 结尾的极大子区间时间复杂度每个位...原创 2020-04-12 09:16:37 · 218 阅读 · 0 评论