随笔分类 -  LeetCode / LeetCode题解

熟悉算法
摘要:给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 ###1. 单调栈 假如要遍历所有区间,哪怕可以直接获得最小值,时间复杂度也是O(n^2^) 这里我们不逐个找对应区间,而是计算每个值对区间的贡献,可以将时间复杂度降到O(n) 其实也就找遍历时 阅读全文
posted @ 2023-05-19 17:19 失控D大白兔
摘要:一个工作时间段可以连续工作sessiontime个小时 给你任务列表task,task[i]表示第i项任务花费时间 求完成全部工作所需最小时间段(可以按任意顺序完成任务) ####1. 回溯法 回溯时按任务下标推进,边界条件为任务下标等于任务长度 同时要记录回溯几个状态, 分别是当前任务下标、已用时 阅读全文
posted @ 2023-05-19 13:11 失控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大白兔
摘要:给定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大白兔
摘要:在歌曲列表中,第 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大白兔
摘要:简化unix文件路径 ####1. 分割提取+栈 class Solution { public: string simplifyPath(string path) { vector<string> names = split(path, '/');//消除/并得到待处理的多段文件名 vector< 阅读全文
posted @ 2023-05-04 22:11 失控D大白兔
摘要:给你一个字符串 s,请你将s分割成一些子串,使每个子串都是回文串,返回 s 所有可能的分割方案 ###1. 回溯+动态规划 class Solution { public: vector<vector<int>> dp; vector<vector<string>> res; vector<stri 阅读全文
posted @ 2023-05-04 21:18 失控D大白兔
摘要:###1. 移动石子直到连续(三个石子) class Solution { public: vector<int> numMovesStones(int a, int b, int c) { int x = min({a, b, c}); int z = max({a, b, c}); int y 阅读全文
posted @ 2023-05-01 05:25 失控D大白兔
摘要:给你初始位置和目标位置,以及一些位置之间的快速路径,普通点之间的代价为曼哈顿距离 求初始位置到目标位置最小代价 两个算法都直接使用了sp路径序列当做点,边(代价计算)定义为前一路径第二坐标到后一路径第一坐标 ###1. Floyd算法 class Solution { public: const i 阅读全文
posted @ 2023-05-01 04:02 失控D大白兔
摘要:###一. 买卖一次(简单) dp[i]表示第i天卖出时的最大值,可以用滚动变量优化 ``` class Solution { public: int maxProfit(vector& prices) { int n = prices.size(); vector dp(n+1); int min 阅读全文
posted @ 2023-04-24 19:17 失控D大白兔
摘要:给你一个整数数组 nums,返回nums中最长等差子序列的长度 ###一. 动态规划 该题类似最长递增子序列 dp[i][j]定义为以i为结尾,公差为j的最长等差数列长度 class Solution { public: int longestArithSeqLength(vector<int>& 阅读全文
posted @ 2023-04-22 22:40 失控D大白兔
摘要:给你一个整数数组 arr,请你将该数组分隔为长度 最多 为 k 的一些(连续)子数组。 分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元素最大和 ###一. 动态规划(正向递推) 分析:数组的最大和是和子数组最大和关联的,对子问题的优化可以带来对整个问 阅读全文
posted @ 2023-04-19 21:52 失控D大白兔 阅读(125) 评论(0) 推荐(0)
摘要:设计一个数据结构,有效地找到给定子数组的 多数元素 。 子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上(大于半数)的元素 分析 对于子区间进行多次查询,采用线段树的方法 给定的数组,我们可以将它分成任意的两部分,分别使用投票算法得到多数元素和出现的次数 如果该数组存在多数元 阅读全文
posted @ 2023-04-18 00:01 失控D大白兔
摘要:在一个 n x n 的整数矩阵 grid 中,每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。 当开始下雨时,在时间为 t 时,水池中的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。 你从坐标方格的左上平台 (0,0) 阅读全文
posted @ 2023-04-14 03:40 失控D大白兔
摘要:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等 ###一. 回溯法 ####1. 对每个数,回溯放入子集(球视角) 只关心每个球是否成功放入,球在k个容器中做选择,做出选择后进入下一个状态 class Solution { public: b 阅读全文
posted @ 2022-09-20 10:06 失控D大白兔
摘要:###1. 灯泡开关I 初始时有 n 个灯泡处于关闭状态,第i轮切换i的倍数位置的开关,直到第n轮切换位置n的灯泡开关,返回n轮后灯泡亮着个数 实际上就是求进行奇数次操作灯泡个数,对第k个灯泡进行操作的轮次为其约数,约数一般成对存在,除非为完全平方数 原问题转换为求1~n的完全平方数个数 retur 阅读全文
posted @ 2022-09-15 01:19 失控D大白兔
摘要:求数组最长摆动子序列长度 ####1. 动态规划 分两种状态进行转移 up[i]表示数组前i个数的最长上升摆动序列长度 down[i]表示数组前i个数的最长下降摆动序列长度 注意比较条件,以及导致状态转移的原因 class Solution { public: int wiggleMaxLength 阅读全文
posted @ 2022-09-03 18:22 失控D大白兔