
LeetCode
xuanweiace
一个热爱算法竞赛的弱校ACMer路过。青大本,浙大硕,方向后端开发,菜鸡一枚,奋斗ing...
展开
-
【LeetCode - 1235. hard】规划兼职工作
那道题直接贪心即可(其中又分两种思路,右端点贪心,能选则选。左端点贪心,能选择试图选,有更优则取更优)官方题解是dp+二分,我这种写法是离散化+枚举dp,我的代码复杂度更高一些,可以直接看官网做法。如果限定这道题的报酬都是1,那么就转化成【最大不相交区间数】了。n个区间,求最大的不相交区间数。这道题带权值了,所以加个dp。原创 2022-11-03 02:33:40 · 503 阅读 · 1 评论 -
【LeetCode】面试题 17.19. 消失的两个数字
法二:给原数组加上1~N这N个数,变为“给定一个数组,其中只有两个数出现了一次,其他数都出现了两次,求这两个数”的题目,然后老套路了。法一:假设两个数分别是a和b,那么不难求出a+b和a^2+b^2,然后求解二次方程就可以了。原创 2022-11-02 15:19:09 · 1018 阅读 · 0 评论 -
【LeetCode-6223 hard】317场周赛. 移除子树后的二叉树高度
我做麻烦了 ,其实两遍dfs就可以了,第一遍算高度,第二遍算深度,并且在第二次dfs的时候可以直接维护出答案数组:ans[i]代表删掉i为根节点的子树后树的高度。其实主要的思想就是子树问题可以简化成根节点的问题,即把整个子树的信息都汇聚到根节点上,然后把这个信息作为参数延续在dfs中传递就可以了。我的做法比较麻烦,首先基于一个结论:同层删除一个节点之后,答案肯定在同层的其他节点身上。如果该层之后这一个节点,那答案肯定在父节点身上。原创 2022-11-02 15:18:40 · 423 阅读 · 0 评论 -
【LeetCode-940 hard】不同的子序列 II
dp之后考虑去重(或者直接再用一个数组cnted[26]表示'a'~'z'字符结尾的子序列已经有多少个了)然后直接作差就可以,因为不难证明,cnted[s[i]-'a']统计的,是dp[i]的真子集,所以所有s[i]结尾的都可以减去。dp[i]代表以s[i]结尾的子序列数量。然后再加一层循环枚举倒数第二个字符。原创 2022-11-02 15:00:43 · 193 阅读 · 0 评论 -
【LeetCode 904-medium】水果成篮
力扣题我的AC代码:(法1:边遍历边维护答案,如果遇到f[i]是第三个数就抛弃 除了f[i-1]的另一个数)指定左端点i,二分右端点j,看最大值和最小值是否是f[i]和f[i+1]。复杂度O(nlogn)这题做法多种多样,看能不能找到五种做法。用哈希表维护(或者map)思路3:(法3:区间最大值和区间最小值)思路2:(法2:尺取法)原创 2022-10-19 00:59:02 · 255 阅读 · 0 评论 -
【LeetCode2434. medium】使用机器人打印字典序最小的字符串
1、①那里,没必要,因为他可以和第二种方法合并,没必要先处理当前字符,然后再进流程。本来想着是,先往前看相邻的(输出,必须是连续的c字符),然后往后看(只输出c字符,一直到后面没有c字符),然后再往前看(栈内的全都输出,一直到输出完c字符)因为你看题目说有两种操作,但是却不问最少的操作数,说明说不定这两种操作可以合并或者转换,与两种操作无关。本来想的是,从字符a-z进行遍历,先处理a在处理b这样,但是好像处理不了bdacb这种情况。然后发现没这么复杂,从栈的角度考虑贪心,啥时候入栈,啥时候输出,就行了。原创 2022-10-16 20:55:05 · 329 阅读 · 0 评论 -
【LeetCode856. medium】括号的分数
比如第三层的括号之间就是相加,第二层的括号就是把第三层的分数和乘2。记得算完第二层的分之后,要把第三层的清零,因为后面还有可能出现第三层。二是预处理一下字符串,比如最内层的中间给加个特殊字符&,然后如果遍历到&,就cnt[sk.size()]=1就可以了。至于最里层的括号,发现只有最内层的括号会有这个问题(需要赋初值为1,而不是向高层乘2)。本来是想用栈做,但是发现其实得分是相加还是乘2,和括号的层级有关系。总体看下来,栈其实就只充当一个记录层数的作用了,完全可以用变量代替。原创 2022-10-16 20:54:13 · 193 阅读 · 0 评论 -
【LeetCode-769. medium】最多能完成排序的块
考虑到数组长度为n,而且数组元素位于区间[0, n-1]且不重复,那么数组排好序后,每个值和下标恰好是相等的;所以,从左到右遍历数组,并且分别对值和下标累加求和,只要两个和相等,就切出一个块。(思路是a==c, a+b==c+d,则b=d,类似糖水不等式那种,初量和全量相等,则增量相等)(注意是初始化,最好不要直接用下一个的值,具体见代码标注)2.2 如果符合分割条件,则分割。如此,时间复杂度O(n),空间复杂度O(1)。2、for循环或者while,里面三步。原创 2022-10-13 02:16:42 · 160 阅读 · 0 评论 -
【LeetCode-6195. hard】对字母串可执行的最大删除数
正着想是,dp[i]代表前i个能消除的最大次数,枚举最后一次消除次数,反着想,就是dp[i]代表从i到结尾都消除的最大次数,然后枚举第一次消除的字符串。然后一想,诶,这就是可解的了。二是因为dp[i]代表前i个的最大次数,这其实不只要保存最大次数这一个状态,还有可能很多局部最优解需要保存。倒着推,结合这题的题意,正好。刚开始觉得直接贪心选有短则短,但是发现不行,不能贪心有短的可以操作的则选短的。然后就是对于如何判断两个字符串的相等,可以字符串哈希,也可以用求LCP的板子。错误代码:(从前往后递推的)原创 2022-10-09 22:50:14 · 204 阅读 · 0 评论 -
【LeetCode-2421(hard)】好路径的数目
启发式合并,注意这题的【特性】在于,对于每个根节点,要把小于根节点的val都删掉,保证一条链上是中间小两边大。因为这样递归上去,刚好可以保证链上的每个非端点都小于端点的值)1、【由特解到通解】先面向数据编程,想人脑想的话,会怎么做?那肯定是先找最大的值,然后看有几个,然后把最大的值去掉看次大的,以此类推。3、树分治(点分治,但是校招应该不会问到这个难度吧,,不复习了就)对于这道题,可以把这种大小关系想成一种偏序关系,然后自然想到可以通过排序解决。2、解决树类问题的一种思路就是,重建树+在线维护,比如这题。原创 2022-09-30 15:07:59 · 568 阅读 · 0 评论 -
【LeetCode-面试题 17.09 - medium】第 k 个数
法二:看成三个有序链表,做三路归并即可。法一:优先队列做bfs。原创 2022-09-30 15:06:42 · 217 阅读 · 0 评论 -
【LeetCode每日一题】2024. 考试的最大困扰度
力扣解题报告:AC代码:原创 2022-03-30 13:29:03 · 174 阅读 · 0 评论 -
【Leetcode - 172】阶乘后的零(思维)
给定一个整数 n ,返回 n! 结果中尾随零的数量。提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1示例 1:输入:n = 3输出:0解释:3! = 6 ,不含尾随 0示例 2:输入:n = 5输出:1解释:5! = 120 ,有一个尾随 0示例 3:输入:n = 0输出:0提示:0 <= n <= 104进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?来源:力扣(LeetCod..原创 2022-03-30 13:29:28 · 191 阅读 · 0 评论 -
【LeetCode - 2049】统计最高分的节点数目
解题报告;直接dp。注意mx也得longlongAC代码:class Solution {public: vector<int> vv[200005]; int sum[200005]; long long ans[200005]; int n; void dfs(int x) { ans[x] = 1; sum[x] = 1; for(int i = 0; i<vv[x].size();...原创 2022-03-12 13:39:36 · 235 阅读 · 0 评论 -
【LeetCode - 798】得分最高的最小轮调(转化法)
解题报告:思路一:这题首先说一个nlogn的方法。首先一个主客转化,题目描述是说把数组做翻转,idx不变,然后nums[i]和i作比较。那么我们可以转化为让数组不变,idx转变,即:假设刚开始i=4,那么idx的变化为[4,3,2,1,0,n-1,...,5],再用nums[i] - idx,如果这个值>0,则是符合区间的k。具体来说,比如nums = [ 2, 3, 1, 4, 0],对应的idxidx = [ 0, 1, 2, 3, 4],作差后diff = [-2,...原创 2022-03-11 23:46:08 · 218 阅读 · 0 评论 -
【LeetCode - 443】压缩字符串(模拟)
解题报告:直接模拟。class Solution {public: int compress(vector<char>& chars) { int p = 0; for(int i = 0; i<chars.size();) { int j = i+1; while(j<chars.size() && chars[j] == chars[i]) j...原创 2022-03-10 20:02:04 · 165 阅读 · 0 评论 -
【LeetCode - 32】最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0提示:0 <= s.length <= 3 * 104s[i] 为 '(' 或 ')'来源:力扣(LeetCode)链接:https://leetcode-.原创 2022-03-07 13:05:22 · 581 阅读 · 1 评论 -
【LeetCode - 1765】. 地图中的最高点
力扣解题报告:多元BFS。进阶一下:二维数组,1表示等高线,0表示平地,比如输入010111010输出010121010输入010101010输出010111010即输入一个二维地图,保证等高线一定是闭合的环,最外圈保证一定是0,求每个点的真实高度。class Solution {public: vector<vector<int>> highestPeak(vector<vector<in.原创 2022-03-07 01:15:07 · 172 阅读 · 0 评论 -
【LeetCode - 33】搜索旋转排序数组(二分)
力扣解题报告:二分。但是有不少细节要考虑清楚。所以干脆考虑另一种二分的方式。也就是第二次二分的时候,把两半数组给拼成一个完整的数组,当然下标需要是虚拟的,这一步可以用偏移量+取模完成。这样就不需要考虑边界情况了。class Solution {public: int search(vector<int>& nums, int target) { int n = nums.size(); int l = 0, r = n.原创 2022-03-07 01:10:54 · 114 阅读 · 0 评论 -
【LeetCode】第283场周赛题解
给你一个整数数组 nums 和一个整数 k 。请你向 nums 中追加 k 个 未 出现在 nums 中的、互不相同 的 正 整数,并使结果数组的元素和 最小 。返回追加到 nums 中的 k 个整数之和。示例 1:输入:nums = [1,4,25,10,25], k = 2输出:5解释:在该解法中,向数组中追加的两个互不相同且未出现的正整数是 2 和 3 。nums 最终元素和为 1 + 4 + 25 + 10 + 25 + 2 + 3 = 70 ,这是所有情况中的最小值。所以追原创 2022-03-07 01:04:42 · 325 阅读 · 0 评论 -
【LeetCode - 42. 接雨水】
42. 接雨水难度困难3164给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == h...原创 2022-03-01 23:37:20 · 120 阅读 · 0 评论 -
【LeetCode 629】K个逆序对数组
给出两个整数n和k,找出所有包含从1到n的数字,且恰好拥有k个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第i个和第j个元素,如果满i<j且a[i]>a[j],则其为一个逆序对;否则不是。由于答案可能很大,只需要返回 答案 mod 109+ 7 的值。示例 1:输入: n = 3, k = 0输出: 1解释:只有数组 [1,2,3] 包含了从1到3的整数并且正好拥有 0 个逆序对。示例 2:输入: n = 3, k = 1...原创 2022-02-17 22:19:25 · 490 阅读 · 0 评论 -
【LeetCode 2】两数相加(链表)
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,...转载 2022-02-17 19:25:51 · 124 阅读 · 0 评论 -
【LeetCode 295】. 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum(3)findMe.原创 2022-02-16 01:53:37 · 194 阅读 · 0 评论 -
【LeetCode 986】 区间列表的交集(区间交集)
给定两个由一些 闭区间 组成的列表,firstList 和 secondList ,其中 firstList[i] = [starti, endi] 而secondList[j] = [startj, endj] 。每个区间列表都是成对 不相交 的,并且 已经排序 。返回这 两个区间列表的交集 。形式上,闭区间[a, b](其中a <= b)表示实数x的集合,而a <= x <= b 。两个闭区间的 交集 是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和...原创 2022-02-15 23:41:00 · 601 阅读 · 0 评论 -
【牛客 - NC93】设计LRU缓存结构(模拟)
设计LRU缓存结构_牛客题霸_牛客网描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能1. set(key, value):将记录(key, value)插入该结构2. get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的,然后都会刷新缓存。2.当缓存的大小超过k时,移除最不经常使用的记录。3.输入一个二维数组与k,二维数组每一维有2个或者3个数字原创 2022-02-13 21:59:47 · 143 阅读 · 0 评论 -
【LeetCode1046】最后一块石头的重量(堆heap)
题干:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输出:1解释:先选出 7 和 8,得到...原创 2022-02-13 17:50:32 · 123 阅读 · 0 评论 -
剑指 Offer 51. 数组中的逆序对(归并排序做法)
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题报告:今天没.原创 2022-02-13 00:15:26 · 102 阅读 · 0 评论 -
【LeetCode240、剑指offer04】二维数组中的查找(线性做法)
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target=5...原创 2022-02-12 22:49:18 · 111 阅读 · 0 评论 -
【LeetCode160】相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表skipA -原创 2022-02-10 19:06:24 · 128 阅读 · 0 评论 -
【LeetCode-581】最短无序连续子数组
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 1:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1,2,3,4]输出:0示例 3:输入:nums = [1]输出:0提示:1 <= num.原创 2022-02-03 15:21:48 · 6455 阅读 · 0 评论 -
LeetCode 260. 只出现一次的数字 III
题目大意:给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nums = [-1,0]输出:[-1,0]示例 3:输入:nums = [0,1]输出:[1,0]提示:2 &l.原创 2021-11-20 15:20:10 · 119 阅读 · 0 评论 -
LeetCode 598. 范围求和 II
https://leetcode-cn.com/problems/range-addition-ii题目大意给定一个初始元素全部为0,大小为 m*n 的矩阵M以及在M上的一系列更新操作。操作用二维数组表示,其中的每个操作用一个含有两个正整数a 和 b 的数组表示,含义是将所有符合0 <= i < a 以及 0 <= j < b 的元素M[i][j]的值都增加 1。在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。示例 1:输入...原创 2021-11-20 12:38:34 · 125 阅读 · 0 评论 -
LeetCode 375. 猜数字大小 II
题目大意:https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii我们正在玩一个猜数游戏,游戏规则如下:我从1到 n 之间选择一个数字。你来猜我选了哪个数字。如果你猜到正确的数字,就会 赢得游戏 。如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。给你一个特定的数字 n ,返回..原创 2021-11-19 21:46:09 · 142 阅读 · 0 评论 -
LeetCode 397. 整数替换
题目大意:给定一个正整数n ,你可以做如下操作:如果n是偶数,则用n / 2替换n 。如果n是奇数,则可以用n + 1或n - 1替换n 。n变为 1 所需的最小替换次数是多少?链接:https://leetcode-cn.com/problems/integer-replacement示例 1:输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1示例 2:输入:n = 7输出:4解释:7 -> 8 -> 4 ...原创 2021-11-19 17:29:01 · 348 阅读 · 0 评论 -
LeetCode 318. 最大单词长度乘积
给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。https://leetcode-cn.com/problems/maximum-product-of-word-lengths示例1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16解释: 这两个单词为 "abcw",...原创 2021-11-19 16:11:37 · 130 阅读 · 0 评论 -
逆序数问题,用归并排序而非树状数组求解
逆序数,结合归并排序。之前一直用树状数组写的,今天发现归并排序也很好写。https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tab=answerKeyclass Solution {public: int a[200005] = {0}, tmp[200005] = {0}; int sort(int left, int mid, int right) { int p1 = le原创 2021-03-16 20:54:38 · 133 阅读 · 0 评论 -
【LeetCode - 556】下一个更大元素 III(贪心,思维)
https://leetcode-cn.com/problems/next-greater-element-iii/给你一个正整数n ,请你找出符合条件的最小整数,其由重新排列 n中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。示例 1:输入:n = 12输出:21示例 2:输入:n = 21输出:-1提示:1 &l...原创 2021-03-12 17:09:56 · 161 阅读 · 0 评论 -
【LeetCode - 141&142】环形链表(i和ii)(快慢指针,链表)
https://leetcode-cn.com/problems/linked-list-cycle/给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。.原创 2021-03-12 15:20:14 · 137 阅读 · 0 评论 -
【LeetCode - 227】基本计算器 II(栈)
https://leetcode-cn.com/problems/basic-calculator-ii/给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = "3+2*2"输出:7示例 2:输入:s = " 3/2 "输出:1示例 3:输入:s = " 3+5 / 2 "输出:5提示:1 <= s.length <= 3 * 105s 由整数和算符 ('+', '-', '*'..原创 2021-03-12 13:05:30 · 149 阅读 · 0 评论