自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无敌兔0x01

无欲速,无见小利。欲速,则不达;见小利,则大事不成。

  • 博客(134)
  • 资源 (2)
  • 问答 (5)
  • 收藏
  • 关注

原创 【栈】B018_LC_不同字符的最小子序列(单调递增栈 + 贪心)

一、ProblemReturn the lexicographically smallest subsequence of text that contains all the distinct characters of text exactly once.Input: "cdadabcc"Output: "adbc"Constraints:1 <= text.length <= 1000text consists of lowercase English letters.二、

2020-06-30 20:52:05 217

原创 【树】B038_LC_根到叶路径上的不足节点(后序遍历)

一、Problem给定一棵二叉树的根 root,请你考虑它所有 从根到叶的路径:从根到任何叶的路径。(所谓一个叶子节点,就是一个没有子节点的节点)假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为「不足节点」,需要被删除。请你删除所有不足节点,并返回生成的二叉树的根。[1,2,-3,-5,null,4,null]-1提示:给定的树有 1 到 5000 个节点-10^5 <= node.val <= 10^5-10^9

2020-06-30 17:38:08 242

原创 【链表】C015_LC_回文链表(双指针 / 利用递归逐层返回)

一、ProblemYou have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that adds the two numbers and returns the sum

2020-06-30 16:24:52 184

原创 【链表】B014_LC_链表求和(空链表值为 0 / 进阶问题)

一、Problem二、Solution方法一:空链表值为 0和字符串相加一个思想,只要有一个链表不空就一直循环下去,链表的空节点的值默认为 0class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int ca = 0; ListNode dead = new ListNode(-1), cur = dead; while (l1 != null

2020-06-30 11:52:39 257

原创 【设计】C009_LC_用两个栈实现队列(数据迁移)

一、Problem用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]提示:1 <= values <= 10000最多会对 appendTa

2020-06-30 08:37:49 169

原创 【位运算】B013_LC_ 按列翻转得到最大值等行数(统计行的模式数)

一、Problem给定由若干 0 和 1 组成的矩阵 matrix,从中选出任意数量的列并翻转其上的 每个 单元格。翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。返回经过一些翻转后,行上所有值都相等的最大行数。输入:[[0,0,0],[0,0,1],[1,1,0]]输出:2解释:翻转前两列的值之后,后两行由相等的值组成。提示:1 <= matrix.length <= 3001 <= matrix[i].length <= 300所有 matrix[

2020-06-29 17:42:28 330

原创 【位运算】B012_LC_负二进制转换(通用 k 进制)

一、ProblemGiven a number N, return a string consisting of "0"s and "1"s that represents its value in base -2 (negative two).The returned string must have no leading zeroes, unless the string is “0”.Example 1:Input: 2Output: "110"Explantion: (-2) ^ 2 +

2020-06-29 16:34:45 179

原创 【队列】A007_LC_满足不等式的最大值(公式转化 + 单调递减队列优化)

一、Problem给你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标 x 的值从小到大排序。也就是说 points[i] = [xi, yi] ,并且在 1 <= i < j <= points.length 的前提下, xi < xj 总成立。请你找出 yi+yj+∣xi−xj∣y_i + y_j + |x_i - x_j|yi​+yj​+∣xi​−xj​∣ 的 最大值,其中 ∣xi−xj∣|x_i - x_j|∣xi​−xj

2020-06-28 18:17:33 348

原创 【双指针】B021_LC_满足条件的子序列数目(二分思想 + 排列组合 + 幂数组)

一、Problem给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。输入:nums = [3,5,6,7], target = 9输出:4解释:有 4 个子序列满足该条件。[3] -> 最小元素 + 最大元素 <= target (3 + 3 <= 9)[3,5] -> (3 + 5 <

2020-06-28 16:49:36 221

原创 【数学】B083_LC_检查数组对是否可以被 k 整除(检查成对的余数 + 处理负数取模)

一、Problem给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。输入:arr = [-1,1,-2,2,-3,3,-4,4], k = 3

2020-06-28 15:57:51 128

原创 【数学】B082_LC_n 的第 k 个因子(排序 / 分析倒序因子)

一、Problem给你两个正整数 n 和 k 。如果正整数 i 满足 n % i == 0 ,那么我们就说正整数 i 是整数 n 的因子。考虑整数 n 的所有因子,将它们 升序排列 。请你返回第 k 个因子。如果 n 的因子数少于 k ,请你返回 -1 。输入:n = 1000, k = 3输出:4解释:因子列表包括 [1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500, 1000] 。提示:1 <= k <=

2020-06-28 15:27:25 230

原创 【状压 dp】A004_LC_并行课程 II(位运算枚举子集)

一、Problem给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 dependencies 中, dependencies[i] = [xi, yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。在一个学期中,你 最多 可以同时上 k 门课,前提是这些课的先修课在之前的学期里已经上过了。请你返回上完所有课最少需要多少个学期。题目保证一定存在一种上完所有课的方式。输入:n = 4, dependencies = [[2,1],

2020-06-28 09:46:32 259

原创 【滑窗】B020_LC_删掉一个元素以后全为 1 的最长子数组(移动规则)

一、Problem给你一个二进制数组 nums ,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0 。提示 1:输入:nums = [1,1,0,1]输出:3解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1 。示例 2:输入:nums = [0,1,1,1,0,1,1,0,1]输出:5解释:删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,

2020-06-27 23:09:26 202

原创 【数组】a_lc_缺失的第一个正数(索引对比值)

一、ProblemGiven an unsorted integer array, find the smallest missing positive integer.Example 1:Input: [1,2,0]Output: 3Example 2:Input: [3,4,-1,1]Output: 2Example 3:Input: [7,8,9,11,12]Output: 1Note:Your algorithm should run in O(n) time and

2020-06-27 20:33:49 228

原创 【堆】B009_LC_距离相等的条形码(大顶堆 + 选位置)

一、Problem在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。请你重新排列这些条形码,使其中两个相邻的条形码 不能 相等。 你可以返回任何满足该要求的答案,此题保证存在答案。示例 1:输入:[1,1,1,2,2,2]输出:[2,1,2,1,2,1]示例 2:输入:[1,1,2]输出:[1,2,1]提示:1 <= barcodes.length <= 100001 <= barcodes[i] <= 10000二、Soluti

2020-06-27 18:26:29 175

原创 【数组】B079_LC_交换一次的先前排列(找最接近的升序数对)

一、Problem给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的最大可能排列。如果无法这么操作,就请返回原数组输入:[3,2,1]输出:[3,1,2]解释:交换 2 和 1输入:[3,1,1,3]输出:[1,3,1,3]解释:交换 1 和 3二、Solution方法一:规律先交换位于后面的元素对字典序影响最小,所以从后往前找第一个升序对,将他们交换后返回,这是错的,没有

2020-06-27 17:48:34 196

原创 【线性 dp】B014_LC_最长字符串链(暴力 / map 优化)

一、Problem给出一个单词列表,其中每个单词都由小写英文字母组成。如果我们可以在 word1 的任何地方添加一个字母使其变成 word2,那么我们认为 word1 是 word2 的前身。例如,“abc” 是 “abac” 的前身。词链是单词 [word_1, word_2, …, word_k] 组成的序列,k >= 1,其中 word_1 是 word_2 的前身,word_2 是 word_3 的前身,依此类推。从给定单词列表 words 中选择单词组成词链,返回词链的最长可能长度。

2020-06-27 15:00:44 292

原创 【字符串】B054_LC_困于环中的机器人(模拟 / 取模控制方向)

一、Problem二、Solution方法一:"GL"输出:false预期:trueclass Solution { final static int U = 0, D = 1, L = 2, R = 3; public boolean isRobotBounded(String instructions) { char s[] = instructions.toCharArray(); int x = 0, y = 0, d = U; Set&

2020-06-27 11:17:09 290

原创 【区间 dp】B021_LC_分隔数组以得到最大和(预处理区间最大值 / 优化)

一、Problem给出整数数组 A,将该数组分隔为长度最多为 K 的几个(连续)子数组。分隔完成后,每个子数组的中的值都会变为该子数组中的最大值。返回给定数组完成分隔后的最大和。输入:A = [1,15,7,9,2,5,10], K = 3输出:84解释:A 变为 [15,15,15,9,10,10,10]提示:1 <= K <= A.length <= 5000 <= A[i] <= 10^6二、Solution方法一:预处理区间最大值这题我一看两个条

2020-06-27 10:23:37 296

原创 【树】B037_LC_从二叉搜索树到更大和树(反中序遍历)

一、ProblemGiven the root of a binary search tree with distinct values, modify it so that every node has a new value equal to the sum of the values of the original tree that are greater than or equal to node.val.Input: [4,1,6,0,2,5,7,null,null,null,3,null

2020-06-27 08:07:34 212

原创 【链表】C013_LC_移除重复节点(hash 表 / 双指针)

一、Problem编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?二、Solution方法一:超级暴力class Solution { public ListNode removeDup

2020-06-26 22:46:43 186

原创 【滑窗】B019_LC_移动石子直到连续 II(分类讨论)

一、Problem在一个长度无限的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作端点石子。每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。值得注意的是,如果石子像 stones = [1,2,5] 这样,你将无法移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。要使游戏结束,你可以执行的最小和

2020-06-26 22:09:49 188

原创 【区间 dp】B020_LC_多边形三角剖分的最低得分(画图)

一、Problem给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], …, A[N-1]。假设您将多边形剖分为 N-2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 N-2 个三角形的值之和。返回多边形进行三角剖分后可以得到的最低分。输入:[3,7,4,5]输出:144解释:有两种三角剖分,可能得分分别为:3*7*5 + 4*5*7 = 245,或 3*4*5 + 3*4*7 = 144。最低分数为 144。

2020-06-26 20:29:14 253

原创 【搜索】A065_LC_逃离大迷宫(预算障碍物面积 + 正反 bfs / 优化)

一、Problem在一个 10^6 x 10^6 的网格中,每个网格块的坐标为 (x, y),其中 0 <= x, y < 10^6。我们从源方格 source 开始出发,意图赶往目标方格 target。每次移动,我们都可以走到网格中在四个方向上相邻的方格,只要该方格不在给出的封锁列表 blocked 上。只有在可以通过一系列的移动到达目标方格时才返回 true。否则,返回 false。示例 1:输入:blocked = [[0,1],[1,0]], source = [0,0], t

2020-06-26 17:52:48 236

原创 【线性 dp】B013_LC_不相交的线(LMS 变形)

一、Problem我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。以这种方法绘制线条,并返回我们可以绘制的最大连线数。输入:A = [1,4,2], B = [1,2,4]输出:2解释:我们可以画出两条不交叉的线,如上图所示。我们无法画出第三条不相交的直线,因为从 A[1]=4 到 B[2]=4 的直线将与从 A[2]=2 到

2020-06-26 12:12:23 249

原创 【搜索】B064_LC_边框着色(理解题意)

一、Problem给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色。只有当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一连通分量。连通分量的边界是指连通分量中的所有与不在分量中的正方形相邻(四个方向上)的所有正方形,或者在网格的边界上(第一行/列或最后一行/列)的所有正方形。给出位于 (r0, c0) 的网格块和颜色 color,使用指定颜色 color 为所给网格块的连通分量的边界进行着色,并返回最终的网格 grid示例 1:输入:grid =

2020-06-26 10:11:09 295

原创 【数学】C081_LC_移动石子直到连续(脑筋急转弯 + 分类讨论)

一、Problem三枚石子放置在数轴上,位置分别为 a,b,c。每一回合,我们假设这三枚石子当前分别位于位置 x, y, z 且 x < y < z。从位置 x 或者是位置 z 拿起一枚石子,并将该石子移动到某一整数位置 k 处,其中 x < k < z 且 k != y。当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:answer = [minimum_moves, ma

2020-06-26 10:01:21 1053

原创 【区间 dp】B019_LC_单词拆分 I(向前看 / 优化边界)

一、Problem给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。输入: s = "applepenapple", wordDict = ["apple", "pen"]输出: true解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。注意你可以重复使用字典中的单词。输入

2020-06-25 21:58:43 204

原创 【博弈】B001_LC_石子游戏 II(记忆化搜索 / 纯 dp)

一、Problem亚历克斯和李继续他们的石子游戏。许多堆石子 排成一行,每堆都有正整数颗石子 piles[i]。游戏以谁手中的石子最多来决出胜负。亚历克斯和李轮流进行,亚历克斯先开始。最初,M = 1。在每个玩家的回合中,该玩家可以拿走剩下的 前 X 堆的所有石子,其中 1 <= X <= 2M。然后,令 M = max(M, X)。游戏一直持续到所有石子都被拿走。假设亚历克斯和李都发挥出最佳水平,返回亚历克斯可以得到的最大数量的石头。输入:piles = [2,7,9,4,4]输

2020-06-25 21:07:40 355

原创 【网格 dp】B005_LC_最大的以1为边界的正方形 & 最大黑方阵(暴力 / 考虑木桶原理的 dp)

一、ProblemGiven a 2D grid of 0s and 1s, return the number of elements in the largest square subgrid that has all 1s on its border, or 0 if such a subgrid doesn’t exist in the grid.Example 1:Input: grid = [[1,1,1],[1,0,1],[1,1,1]]Output: 9Example 2:In

2020-06-25 18:32:57 226

原创 【区间 dp】B018_LC_叶值的最小代价生成树(枚举长度 / 单调栈)

一、Problem给你一个正整数数组 arr,考虑所有满足以下条件的二叉树:每个节点都有 0 个或是 2 个子节点数组 arr 中的值与树的中序遍历中每个叶节点的值每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。这个和的值是一个 32 位整数。输入:arr = [6,2,4]输出:32解释:有两种可能的树,第一种的非叶节点的总和为 36,第二种非叶节点的总和为 32。 24 24

2020-06-25 12:03:27 191

原创 【贪心】C043_LC_等价多米诺骨牌对的数量(消除差异)

一、ProblemGiven a list of dominoes, dominoes[i] = [a, b] is equivalent to dominoes[j] = [c, d] if and only if either (a==c and b==d), or (a==d and b==c) - that is, one domino can be rotated to be equal to another domino.Return the number of pairs (i, j) f

2020-06-25 10:11:05 219

原创 【数学】B080_LC_绝对值表达式的最大值(表达式的符号分类)

一、ProblemGiven two arrays of integers with equal lengths, return the maximum value of:|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|where the maximum is taken over all 0 <= i, j < arr1.length.Input: arr1 = [1,2,3,4], arr2 = [-1,4,5,6]Output

2020-06-25 10:02:27 629

原创 【数组】C078_LC_数组的相对排序(模拟 / 桶排序)

一、Problem给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:arr1.length, arr2

2020-06-24 22:27:26 196

原创 【状压 dp】A003_LC_最小的必要团队(Map)

一、Problem作为项目经理,你规划了一份需求的技能清单 req_skills,并打算从备选人员名单 people 中选出些人组成一个「必要团队」( 编号为 i 的备选人员 people[i] 含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表 req_skills 中列出的每项技能,团队中至少有一名成员已经掌握。我们可以用每个人的编号来表示团队中的成员:例如,团队 team = [0, 1, 3] 表示掌握技能分别为 people[0],people[1]

2020-06-24 21:49:32 271

原创 【前缀和】B005_LC_表现良好的最长时间段(朴素前缀和 / Map 记录前缀和位置)

一、ProblemWe are given hours, a list of the number of hours worked per day for a given employee.A day is considered to be a tiring day if and only if the number of hours worked is (strictly) greater than 8.A well-performing interval is an interval of day

2020-06-24 20:47:18 219

原创 【双指针】B020_LC_最接近的三数之和(二分思想 + 剪枝)

一、Problem二、Solution方法一:复杂度分析时间复杂度:O()O()O(),空间复杂度:O()O()O(),方法二:复杂度分析时间复杂度:O()O()O(),空间复杂度:O()O()O(),

2020-06-24 16:11:23 232

原创 【栈】A017_LC_解析布尔表达式(处理每一个 (xxx))

一、Problem给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。有效的表达式需遵循以下约定:“t”,运算结果为 True“f”,运算结果为 False“!(expr)”,运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT)“&(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, … 进行逻辑 与的运算(AND)“|(expr1,expr2,…)”,运算过程为对 2 个或以上内部

2020-06-24 09:27:40 260

原创 【数学】B079_LC_大样本统计(注意中位数)

一、Problem我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 的采样个数。我们以 浮点数 数组的形式,分别返回样本的最小值、最大值、平均值、中位数和众数。其中,众数是保证唯一的。我们先来回顾一下中位数的知识:如果样本中的元素有序,并且元素数量为奇数时,中位数为最中间的那个元素;如果样本中的元素有序,并且元素数量为偶数时,中位数为中间的两个元素的平均值。输入:count = [0,1,3,4,0,0,0,0,0,0,0,0,0

2020-06-23 23:12:19 271

原创 【区间 dp】A017_LC_填充书架(暴搜 / 记忆化搜索 / dp(疑惑))

一、Problem附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上。你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0],高度为 books[i][1]。按顺序 将这些书摆放到总宽度为 shelf_width 的书架上。先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelf_width),然后再建一层书架。重复这个过程,直到把所有的书都放在书架上。需要注意的是,在上述过程的每个步骤中,摆放书的顺序与你整理

2020-06-23 22:56:52 222

初一数学知识点汇总图.7z

参与《原力计划【第二季】— 打卡挑战》的文章入选【打卡挑战周榜】的博主,即可获得此勋章。参与《原力计划【第二季】— 打卡挑战》的文章入选【打卡挑战周榜】的博主,即可获得此勋章。参与《原力计划【第二季】— 打卡挑战》的文章入选【打卡挑战周榜】的博主,即可获得此勋章。

2020-05-20

icpc2019.pdf

icpc 基础,推荐一下!

2020-04-03

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除