随笔分类 - LeetCode / LeetCode题解
熟悉算法
摘要:有一棵 n 个节点的无向树,节点编号为 0 到 n - 1 ,根节点编号为 0 。给你一个长度为 n - 1 的二维整数数组 edges 表示这棵树,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 有一条边。 同时给你一个长度为 n 下标从 0 开始的整数数组 value
阅读全文
摘要:一. LRU缓存实现 使用双向链表保证O(1)的优先度更改,同时当做优先队列维护插入顺序 同时这里要结合哈希表,保证更改想要的节点 /* 定义Node 双向链表节点 定义 remove 进行删除节点(只删除节点在链表中的关系) 定义 update 更新指定节点的优先度 定义 insert 插入新的节
阅读全文
摘要:给你一个大小为 3 * 3 ,下标从 0 开始的二维整数矩阵 grid ,分别表示每一个格子里石头的数目。 网格图中总共恰好有 9 个石头,一个格子里可能会有多个石头。 每一次操作中,你可以将一个石头从它当前所在格子移动到一个至少有一条公共边的相邻格子。 请你返回每个格子恰好有一个石头的最少移动次数
阅读全文
摘要:设计一个算法来序列化和反序列化二叉搜索树 对序列化/反序列化算法的工作方式没有限制 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。 ###1. 非递归先序遍历 + 编码 ``` class Codec { public: // Encodes a tree t
阅读全文
摘要:给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等,则认为子数组是一个等值子数组 。 从 nums 中删除最多 k 个元素后,返回可能的最长等值子数组的长度。 ###1. 哈希分组 + 反悔队列 蠢逼做法 ``` class Solution { publi
阅读全文
摘要:给定数组只含1、2、3三种数 每次操作可以将一个数进行修改 将数组修改成非递减顺序的最少次数 ###1. 暴力(笨比做法) 枚举三种类型数分割的界限 ``` class Solution { public: int minimumOperations(vector& nums) { int res
阅读全文
摘要:给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 ###1. 暴力匹配 列举不同子串长度,比较字符串 ``` class Solution { public: bool repeatedSubstringPattern(string s) { int n = s.size()
阅读全文
摘要:你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。 有的课会有直接的先修课程,比如如果想上课
阅读全文
摘要:###一. 课程表I 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则
阅读全文
摘要:给你一个下标从 0 开始的整数数组 nums 和一个正整数 k 。 你可以对数组执行下述操作 任意次 : 从数组中选出长度为 k 的任一子数组,并将子数组中每个元素都减去 1 如果你可以使数组中的所有元素都等于 0 ,返回 true ,否则,返回 false。 ###1. 差分数组 从左往右贪心进行
阅读全文
摘要:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人分享秘密。 同时给你一个整数 forget ,表示每个人在发现秘密 forget 天之后会 忘记 这个秘密。一个人不能在忘记秘密那一天及之后的日子里分享秘密。 ###
阅读全文
摘要:一个块定义为网格图中 2 x 2 的一个子矩阵 请你返回一个下标从 0 开始长度为 5 的整数数组 arr ,arr[i] 表示恰好包含 i 个 黑色格子的块的数目 ###1. 搜索黑格子周围格子 ``` class Solution { public: int dir[4][2] = {{-1,-
阅读全文
摘要:给你一个整数数组 cookies ,其中 cookies[i] 表示在第 i 个零食包中的饼干数量。 另给你一个整数 k 表示等待分发零食包的孩子数量,所有 零食包都需要分发。在同一个零食包中的所有饼干都必须分发给同一个孩子,不能分开。 分发的 不公平程度 定义为单个孩子在分发过程中能够获得饼干的最
阅读全文
摘要:给你一个整数n,如果两个整数 x 和 y 满足下述条件,则认为二者形成一个质数对: * 1 prime(10e6,true); bool flag = false; void getprime(){//埃氏筛预处理 for(int i=2;i> findPrimePairs(int n) { if(
阅读全文
摘要:###一 . 子集 给你一个整数数组 nums ,数组中的元素 互不相同,返回该数组所有可能的子集 #### 1. 回溯法 对每个数做选择,放入当前位,同时固定访问顺序,只访问下标更大的数,避免重复 回溯法 ``` class Solution { public: vector> res; vect
阅读全文
摘要:给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数。如果 nums 的一个排列满足以下条件,我们称它是一个特别的排列: 对于 0 & nums) { int mod = 1e9+7; int m = nums.size(); int memo[m][m f = [&]
阅读全文
摘要:给你一个整数数组 nums 和两个整数:left 及 right 找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数 ###1. 遍历区间右端点 + 同时记录满足条件的左边点位 数组中不能含有大于 right的元素, 且至少含有一个
阅读全文
摘要:给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。 在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。 ###1. 贪
阅读全文
摘要:给一系列顶点,计算这些点能组成矩形的最小面积 ###1. 最小面积矩形(列举对角线+哈希) **矩形的边平行于x轴和y轴** 通过双重循环列举对角线顶点,计算满足条件的矩形面积 ``` class Solution { public: int minAreaRect(vector>& points)
阅读全文
摘要:**模板** ``` int n = nums.size(); vector left(n, -1); //贡献法记录左辖域,开区间 vector right(n, n); //贡献法记录右辖域,开区间 stack st; //单调栈,降序记录 for(int i=0;i 单调栈+前缀和 ``` c
阅读全文