随笔分类 - LeetCode
摘要:给你一个n节点的无向带权连通图,同时告诉你边的端点和权值 对于部分权为-1的边,可以进行修改为任意值,最后使得初始点到目标点最短距离为target ###1. Dijkstra 第一次使用迪杰斯特拉算法,将所有能修改的权值视作1,计算到各点的最短距离 判断该距离是否有操作空间,满足要求的情况下计算要
阅读全文
posted @ 2023-05-23 01:35
失控D大白兔
摘要:给你一棵以 root 为根的 二叉树 ,请你返回任意二叉搜索子树的最大键值和 ###1. 中序遍历+记录多个返回值 ``` class Solution { public: //求子树键值需要后序遍历,判断二叉搜索树需要中序遍历 //判断二叉树也可以用判断左右值加中序遍历的方式,所以这里采用中序遍历
阅读全文
posted @ 2023-05-21 23:00
失控D大白兔
摘要:**模板** ``` int n = nums.size(); vector left(n, -1); //贡献法记录左辖域,开区间 vector right(n, n); //贡献法记录右辖域,开区间 stack st; //单调栈,降序记录 for(int i=0;i 单调栈+前缀和 ``` c
阅读全文
posted @ 2023-05-19 21:02
失控D大白兔
摘要:给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 ###1. 单调栈 假如要遍历所有区间,哪怕可以直接获得最小值,时间复杂度也是O(n^2^) 这里我们不逐个找对应区间,而是计算每个值对区间的贡献,可以将时间复杂度降到O(n) 其实也就找遍历时
阅读全文
posted @ 2023-05-19 17:19
失控D大白兔
摘要:求所有子序列最大值的平方乘以最小值的和 ###1. 数学规律 首先可以发现顺序对结果没有影响,对原数组按升序进行排序,方便从小到大遍历枚举 由于数据量很大,一般只会遍历一次,所以要找数学规律 考虑遍历时的无后效性,前面数组遍历完后,必然会给后面留下一个值 可以通过这个值和当前遍历值计算出以当前值为结
阅读全文
posted @ 2023-05-19 14:51
失控D大白兔
摘要:一个工作时间段可以连续工作sessiontime个小时 给你任务列表task,task[i]表示第i项任务花费时间 求完成全部工作所需最小时间段(可以按任意顺序完成任务) ####1. 回溯法 回溯时按任务下标推进,边界条件为任务下标等于任务长度 同时要记录回溯几个状态, 分别是当前任务下标、已用时
阅读全文
posted @ 2023-05-19 13:11
失控D大白兔
摘要:###一. [区间合并、插入、重叠数](https://www.cnblogs.com/929code/p/16369464.html) ###二. [区间内满足条件的点对、区间和、偏序关系数(树状数组和前缀和)](https://www.cnblogs.com/929code/p/17366099
阅读全文
posted @ 2023-05-19 00:37
失控D大白兔
摘要:所以矩形左下角为(0,0),右上角为(x,y) 给你一个二维整数数组 rectangles 和 二维整数数组 points 求每个点占据的矩形数目 ###1. 暴力 遍历点然后遍历矩形 class Solution { public: vector<int> countRectangles(vect
阅读全文
posted @ 2023-05-18 16:12
失控D大白兔
摘要:1. 将整数转化为负二进制形式 vector<int> baseNeg2(int n) { if(n==0) return {0}; vector<int> res; int cur; int back; while(n!=0){ cur = n&1; back = abs(cur); res.pu
阅读全文
posted @ 2023-05-18 00:51
失控D大白兔
摘要:给你一个长度为 n 的数组 nums ,该数组由从 1 到 n 的不同整数组成 另给你一个正整数 k ,统计并返回 nums 中的中位数等于 k 的非空子数组的数目 ###1. 前缀和 + 哈希 容易知道子数组必然包含数字k,其实就是列举包含k子数组,计算并且中位数为k的个数 同时列举两侧的复杂度是
阅读全文
摘要:你需要制定一份 d 天的工作计划表。工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 <= j < i)。 你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一天的难度之和,而一天的工作难度是当天应该完成工作的最大难度。 给你一个整数数组 jobDifficul
阅读全文
posted @ 2023-05-16 10:27
失控D大白兔
摘要:n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2n-2, 2n-1)。 返回最少交换座位的次数,以便
阅读全文
posted @ 2023-05-15 17:15
失控D大白兔
摘要:数组值定义为所有相邻元素差值的绝对值之和 翻转任意连续的子数组一次,求可行的最大值 ###1. 暴力分析(超时) 翻转后子数组内部数组值不变,所以只需分析子数组的边界翻转后带来的损失和收益 遍历取最大值即可,注意分情况讨论 枚举所有左右边界 class Solution { public: int
阅读全文
posted @ 2023-05-12 01:54
失控D大白兔
摘要:给定nums数组和一个初始值start,目标值goal,对start进行以下三种运算得到goal x + nums[i]、x - nums[i]、x ^ nums[i] 返回最少运算次数 ###1. 广度优先+哈希去重剪枝 class Solution { public: int minimumOp
阅读全文
posted @ 2023-05-12 01:18
失控D大白兔
摘要:给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在相同值形成的环。 一个环是一条开始和结束于同一个格子的长度大于等于 4 的路径。对于一个给定的格子 你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有相同的值 ###1. 深度优
阅读全文
posted @ 2023-05-11 14:57
失控D大白兔
摘要:给你一个整数数组 arr 和一个整数 d arr存储着一些柱子的高度,整数d为你能跳的最远距离,可以选择往左跳和往右跳 除此以外,跳跃途径中只能有更低的柱子存在 你可以选择数组的任意下标开始跳跃,请你返回你最多可以访问多少个下标 ###1. 排序+动态规划 class Solution { publ
阅读全文
posted @ 2023-05-10 23:02
失控D大白兔
摘要:从0位置跳到末位置,每次可以往左跳、往右跳一格,或跳到有与该位置相同数值的地方,求最小跳跃次数 ###1. 广度优先搜索+哈希预处理+动态规划 class Solution { public: vector<int> dp;//dp[i]表示到达i位置最小操作数 int minJumps(vecto
阅读全文
posted @ 2023-05-10 22:39
失控D大白兔
摘要:返回将箱子推到目标位置的最小推动次数,如果无法做到,请返回 -1。 ###一. 01广度优先搜索 + 双端队列 将人与箱子位置状态看做一个节点,在该题中人移动无需代价,即节点转移无需代价,所以边的权值为0 推动箱子移动耗费代价,推动箱子的边权值为1 最终目标是箱子达到目标位置,人的位置可能有多个,问
阅读全文
posted @ 2023-05-09 00:38
失控D大白兔
摘要:在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒 返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量 ###1. 打表(数据量较小) 列出60的倍数+哈希查找 class Solution { public: int numPairsDivisibleBy60(vector<i
阅读全文
posted @ 2023-05-07 01:27
失控D大白兔
摘要:请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目 1. 回溯+标记 每一趟跑一个青蛙(超时) class Solution { public: int minNumberOfFrogs(string croakOfFrogs) { int n =croakOfFrogs.size(); strin
阅读全文
posted @ 2023-05-06 04:22
失控D大白兔