05 2023 档案

摘要:给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。 在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。 ###1. 贪 阅读全文
posted @ 2023-05-31 23:17 失控D大白兔
摘要:两个数的最大公因数大于一时,表示两个数连通 给一个数组,判断该数组是否全连通 ###1. 并查集 通过质因数间接合并数组中所有数 ``` #define limit (int)1e5 vector fac[limit + 10];//建立一个二维数组存储每一个数的全部质因数 // 全局预处理每个数的 阅读全文
posted @ 2023-05-31 00:38 失控D大白兔
摘要:给你一个整数数组 nums 和一个正整数 k 。你可以选择数组的任一子序列并且对其全部元素求和。 数组的第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复) 返回数组的第 k 大和 ###1. 转化问题 + 大根堆 ``` class Solution { public 阅读全文
posted @ 2023-05-30 00:52 失控D大白兔
摘要:给你两个 从小到大排好序 且下标从 0 开始的整数数组 nums1 和 nums2 以及一个整数 k 请你返回第 k (从 1 开始编号)小的 nums1[i] * nums2[j] 的乘积 ###1. 二分查找 ``` class Solution { public: typedef long l 阅读全文
posted @ 2023-05-29 23:42 失控D大白兔
摘要:数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 & nums, int k) { int n = nums.size(); sort(nums.begin 阅读全文
posted @ 2023-05-29 15:28 失控D大白兔
摘要:给你一个 m * n 的矩阵 mat,以及一个整数 k ,矩阵中的每一行都以非递减的顺序排列 你可以从每一行中选出1个元素形成一个数组,返回所有可能数组中的第k个最小数组和 ###1. 暴力 逐行遍历 贪心记录加上当前行的值后,前k个最小数组和 ``` class Solution { public 阅读全文
posted @ 2023-05-28 15:09 失控D大白兔
摘要:###1. [滑动谜题](https://www.cnblogs.com/929code/p/17436699.html) ###2. [转化为全零矩阵的最少反转次数](https://www.cnblogs.com/929code/p/17436196.html) ###3. [推箱子](http 阅读全文
posted @ 2023-05-27 14:32 失控D大白兔
摘要:在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示。一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换 最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开 ###1. 广度优先搜索 ``` class 阅读全文
posted @ 2023-05-27 14:28 失控D大白兔
摘要:类包括根据顶点数和边初始化的构造函数,添加边,求两点最短路径等函数 ###1. 迪杰斯特拉算法(邻接矩阵) ``` class Graph { private: vector> graph; public: Graph(int n, vector>& edges) { graph.resize(n, 阅读全文
posted @ 2023-05-27 13:46 失控D大白兔
摘要:二进制矩阵,可以选择任意位置进行反转,其周围格子也会跟着反转 求使得矩阵全为0的最少反转次数 ###1. 广度优先搜索 将每个状态转化为字符串进行存储,方便剪枝和压缩 ``` class Solution { public: int m; int n; vector> dir = {{0,0},{1 阅读全文
posted @ 2023-05-27 02:41 失控D大白兔
摘要:给一系列顶点,计算这些点能组成矩形的最小面积 ###1. 最小面积矩形(列举对角线+哈希) **矩形的边平行于x轴和y轴** 通过双重循环列举对角线顶点,计算满足条件的矩形面积 ``` class Solution { public: int minAreaRect(vector>& points) 阅读全文
posted @ 2023-05-25 20:39 失控D大白兔
摘要:###一. 基础进阶 ####1. const作用 ``` //定义常量,相比define的字符替换,具有类型安全检测功能,从汇编角度提供的是地址而不是立即数 const int a = 100; //在函数中防止修改,提高程序健壮性 void f(const int i){ i++; }// er 阅读全文
posted @ 2023-05-25 00:05 失控D大白兔
摘要:一个数组的分数定义为数组之和乘以数组的长度 ###1. 前缀和 + 二分 ``` class Solution { public: long long countSubarrays(vector& nums, long long k) { //注意是正整数数组 int n = nums.size() 阅读全文
posted @ 2023-05-24 19:26 失控D大白兔
摘要:将数组分为三个部分,每部分对应二进制数值相同 ###1. 三指针 各部分1的数目应当相同,借助这个性质来找三个指针的起始位置 根据最后一个指针起始位置确定串的长度,逐位比较即可 ``` class Solution { public: vector threeEqualParts(vector& a 阅读全文
posted @ 2023-05-24 18:49 失控D大白兔
摘要:在一颗无向树上青蛙从顶点1起跳,问T秒后停留在目标位置的概率 ###1. 深度优先搜索 问题规模可以进一步递归拆分,概率等于下一个节点到目标概率的平均值 ``` class Solution { public: double frogPosition(int n, vector>& edges, i 阅读全文
posted @ 2023-05-24 01:10 失控D大白兔
摘要:给你一个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大白兔
摘要:总力量定义为以下两个值的 乘积: 巫师中最弱的能力值 组中所有巫师的个人力量值之和 ###1. 单调栈+前缀和+前缀和 根据单调栈求得每一个值的辖域(当前值为最小值的最长数组范围) 接下来问题就转化成了求在辖域中包含当前值所有子数组的和 求和我们采用前缀和的方式 > 对于abcde,假设c为当前辖域 阅读全文
posted @ 2023-05-19 21:01 失控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的个数 同时列举两侧的复杂度是 阅读全文
posted @ 2023-05-17 19:30 失控D大白兔 阅读(58) 评论(0) 推荐(0)
摘要:你需要制定一份 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大白兔
摘要:你可以从中选出任意数量的列并翻转其上的每个单元格。(即翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 ) 返回经过一些翻转后,行与行之间所有值都相等的最大行数 ###1. 编码 + 哈希 首先,可以确定的是通过元操作列翻转,最后必然可以使得至少一行的数值相等 这里我们把第一列固定(由于对称 阅读全文
posted @ 2023-05-15 02:47 失控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大白兔
摘要:给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 ###1. 暴力法 实际上是求以第一个字符为开头的最长回文子串 class Solution { public: string shortestPalindrome(string s) { 阅读全文
posted @ 2023-05-05 01:37 失控D大白兔
摘要:给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度 ####1. 栈操作 对于括号,要知道括号的类型以及位置,类似单调栈的删除操作,找消除后最左边位置 这里直接用正负号整数同时表示类型和位置 class Solution { public: int longe 阅读全文
posted @ 2023-05-04 22:52 失控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大白兔
摘要:x坐标轴上分配了水果的位置(升序)和个数 给你一个开始位置和步数,可以选择往左或往右,返回可以摘到的最大水果数 ###1. 二分查找+前缀和+滑动窗口 枚举先左后右和先右后左两种情况下的左右边界,利用二分和前缀和快速求值 class Solution { public: int maxTotalFr 阅读全文
posted @ 2023-05-04 01:07 失控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大白兔
摘要:如果一个字符串满足以下条件,则称其为 美丽字符串 : * 它由英语小写字母表的前 k 个字母组成。 * 它不包含任何长度为 2 或更长的回文子字符串。 返回下一个美丽字符串 ###1. 贪心更改 从后往前试探增加,满足条件继续往后走,同时判断是否满足回文 ``` class Solution { p 阅读全文
posted @ 2023-05-01 04:22 失控D大白兔
摘要:给你初始位置和目标位置,以及一些位置之间的快速路径,普通点之间的代价为曼哈顿距离 求初始位置到目标位置最小代价 两个算法都直接使用了sp路径序列当做点,边(代价计算)定义为前一路径第二坐标到后一路径第一坐标 ###1. Floyd算法 class Solution { public: const i 阅读全文
posted @ 2023-05-01 04:02 失控D大白兔
摘要:一. 概述 树状数组是一种支持数组的单点修改,以及求前缀和(区间求和)的一种简单数据结构,作为线段树的下位替代 简单来说,树状数组就是利用lowbit(二进制化最后一位表示的值)的性质,把n个节点串起来,隐式地构造一棵树 每个节点x的父亲是x+lowbit(x),当前x节点左边最大的节点是x-low 阅读全文
posted @ 2023-05-01 03:02 失控D大白兔