随笔分类 - LeetCode
摘要:设计一个算法来序列化和反序列化二叉搜索树 对序列化/反序列化算法的工作方式没有限制 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。 ###1. 非递归先序遍历 + 编码 ``` class Codec { public: // Encodes a tree t
阅读全文
posted @ 2023-09-04 13:16
失控D大白兔
摘要:k 子序列指的是 s 的一个长度为 k 的 子序列 ,且所有字符都是唯一的,也就是说每个字符在子序列里只出现过一次。 定义 f(c) 为字符 c 在 s 中出现的次数。 k 子序列的 美丽值定义为这个子序列中每一个字符 c 的f(c)之和 ###1. 贪心 + 组合枚举 贪心选美丽值最大的字符,对于
阅读全文
posted @ 2023-09-03 20:34
失控D大白兔
摘要:给你一个长度为 n 下标从 0 开始的整数数组 receiver 和一个整数 k 总共有 n 名玩家,玩家 编号 互不相同,且为 [0, n - 1] 中的整数。 你需要从 n 名玩家中选择一名玩家作为游戏开始时唯一手中有球的玩家,球会被传 恰好 k 次 定义函数 f(x) 表示从编号为 x 的玩家
阅读全文
posted @ 2023-08-28 16:23
失控D大白兔
摘要:给你一个下标从 0 开始的数组 nums ,它包含非负整数,且全部为 2 的幂,同时给你一个整数 target 。 一次操作中,你必须对数组做以下修改: * 选择数组中一个元素 nums[i] ,满足 nums[i] > 1 。 * 将 nums[i] 从数组中删除。 * 在 nums 的末尾添加两
阅读全文
posted @ 2023-08-28 00:14
失控D大白兔
摘要:给你正整数 low ,high 和 k 。 如果一个数满足以下两个条件,那么它是 美丽的 : * 偶数数位的数目与奇数数位的数目相同。 * 这个整数可以被 k 整除。 请你返回范围 [low, high] 中美丽整数的数目。 ###1. 数位dp ``` class Solution { publi
阅读全文
posted @ 2023-08-20 19:35
失控D大白兔
摘要:给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等,则认为子数组是一个等值子数组 。 从 nums 中删除最多 k 个元素后,返回可能的最长等值子数组的长度。 ###1. 哈希分组 + 反悔队列 蠢逼做法 ``` class Solution { publi
阅读全文
posted @ 2023-08-20 17:40
失控D大白兔
摘要:给定数组只含1、2、3三种数 每次操作可以将一个数进行修改 将数组修改成非递减顺序的最少次数 ###1. 暴力(笨比做法) 枚举三种类型数分割的界限 ``` class Solution { public: int minimumOperations(vector& nums) { int res
阅读全文
posted @ 2023-08-20 15:18
失控D大白兔
摘要:背包问题本质上是求取全组合问题,可做的选择在外循环,遍历的范围在内循环 ###一. 0-1背包问题 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 该类型题目的特点是:**每种物品仅有一件,可以选择放或不放**。直接回溯搜索的时间
阅读全文
posted @ 2023-08-19 03:33
失控D大白兔
摘要:遍历时,贪心选择权重最高的值,同时将没有选择的信息保留(优先队列),以便反悔替换 有时存在两个维度,按其中一个维度排序,另一个维度反悔贪心 ####1. 魔塔游戏 反悔贪心 ``` class Solution { public: int magicTower(vector& nums) { lon
阅读全文
posted @ 2023-08-18 20:11
失控D大白兔
摘要:给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨 每选一块,周围两块会被其他人分掉,请你返回你可以获得的披萨大小总和的最大值。 ###1. 动态规划 容易证明,可以选出任意一个长度为n的不相邻的数字序列 dp[i][j]表示前i个元素中,选择不相邻的j个元素
阅读全文
posted @ 2023-08-18 02:38
失控D大白兔
摘要:给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: 'A' (表示苹果)和 '.' (表示空白格子)。 你需要切披萨 k-1 次,得到 k 块披萨并送给别人。 切披萨的每一刀,先要选择是向垂直还是水平方向切,再在矩形的边界上选一个切的位置,将披萨一分为二。 如果垂直
阅读全文
posted @ 2023-08-17 01:06
失控D大白兔
摘要:一个整数的质数分数等于 x 不同质因子的数目。比方说,300 的质数分数为 3 ,因为 300 = 2 * 2 * 3 * 5 * 5 给你一个长度为 n 的正整数数组 nums 和一个整数 k 。 一开始,你的分数为 1 。你可以进行以下操作至多 k 次,目标是使你的分数最大: 选择一个之前没有选
阅读全文
posted @ 2023-08-14 17:16
失控D大白兔
摘要:给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] = [profiti, categoryi],其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别 现定义 items 的 子序列的优雅度 可以用 total_profit + dist
阅读全文
posted @ 2023-08-10 15:37
失控D大白兔
摘要:给你一个 n x n 整数矩阵 grid ,请你返回 非零偏移下降路径数字和的最小值。 非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。 ###1. 动态规划 ``` class Solution { public: int m
阅读全文
posted @ 2023-08-10 01:25
失控D大白兔
摘要:给一个nxn的二维矩阵grid * grid[r][c] = 1 ,表示一个存在小偷的单元格 * grid[r][c] = 0 ,则表示一个空单元格 每个单元格的安全系数为离所有小偷曼哈顿距离的最小值 (1,1)到(n,n)路径的安全系数为所有单元格安全系数最小值 求一条最大安全系数路径 ###1.
阅读全文
posted @ 2023-08-10 01:24
失控D大白兔
摘要:给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒,对于所有下标 0 & nums1, vector& nums2, int x) { int n = nums1.size(); int sum = accumulate(nums1.begin(),nums1.end(
阅读全文
posted @ 2023-08-09 19:04
失控D大白兔
摘要:在二维网格 grid 上,有 4 种类型的方格: * 1 表示起始方格。且只有一个起始方格。 * 2 表示结束方格,且只有一个结束方格。 * 0 表示我们可以走过的空方格。 * -1 表示我们无法跨越的障碍。 返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。 每一个无
阅读全文
posted @ 2023-08-04 02:10
失控D大白兔
摘要:给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 ###1. 暴力匹配 列举不同子串长度,比较字符串 ``` class Solution { public: bool repeatedSubstringPattern(string s) { int n = s.size()
阅读全文
posted @ 2023-08-04 00:13
失控D大白兔
摘要:给你两个正整数 low 和 high ,都用字符串表示,请你统计闭区间 [low, high] 内的步进数字数目 如果一个整数相邻数位之间差的绝对值都恰好是 1 ,那么这个数字被称为步进数字 请你返回一个整数,表示闭区间 [low, high] 之间步进数字的数目 ###1. 数位dp 本质上就是动
阅读全文
posted @ 2023-08-02 01:43
失控D大白兔
摘要:你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。 有的课会有直接的先修课程,比如如果想上课
阅读全文
posted @ 2023-07-31 18:51
失控D大白兔