- 博客(106)
- 收藏
- 关注
原创 力扣11.23
但是,相同的数组 arr 对于 k = 1 不是 K 递增的(因为 arr[0] > arr[1]),对于 k = 3 也不是 K 递增的(因为 arr[0] > arr[3] )。本题数据范围比较大,因此不能使用n方做法,采用贪心+二分的方法,用q数组记录所有长度为i的最长非递减子序列中的最小值,这样可以尽可能多的构造非递减子序列,例如原数组为1,2,3,2。如果对于每个满足 k <= i <= n-1 的下标 i ,都有 arr[i-k] <= arr[i] ,那么我们称 arr 是 K 递增 的。
2024-11-23 16:15:07
1100
1
原创 力扣11.22
可以发现,若是特殊数字,必须满足它是一个质数的完全平方,因此先使用欧拉筛获得全部质数,然后看看l到r中有多少个质数的平方即可。给你一个输入字符串 (s) 和一个字符模式 § ,请你实现一个支持 ‘?给你两个 正整数 l 和 r。对于任何数字 x,x 的所有正因数(除了 x 本身)被称为 x 的 真因数。如果一个数字恰好仅有两个 真因数,则称该数字为 特殊数字。
2024-11-22 23:06:17
1055
1
原创 力扣11.11
每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。在每次操作中,你可以删除 nums 中的一个元素。有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。给你整数数组 nums ,请你返回将 nums 变成 山形状数组 的 最少 删除次数。给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。你可以按顺序完成切割,也可以根据需要更改切割的顺序。
2024-11-11 15:37:33
1014
原创 力扣11.7
一旦你使用了 words 中第 j 个字符串的第 k 个字符,你不能再使用 words 字符串列表中任意单词的第 x 个字符(x <= k)。为了得到 target 第 i 个字符(下标从 0 开始),当 target[i] = words[j][k] 时,你可以使用 words 列表中第 j 个字符串的第 k 个字符。请注意, 在构造目标字符串的过程中,你可以按照上述规定使用 words 列表中 同一个字符串 的 多个字符。给你一个字符串列表 words 和一个目标字符串 target。
2024-11-07 15:23:32
821
原创 力扣11.5
最长公共子序列的变式,令dp[i][j]表示nums1的前i个数和nums2的前j个数所能构成的点积最大值,接下来考虑nums1[i]和nums2[j]是否选择。数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。使用一个操作数栈和一个符号栈,先转换为后缀表达式,然后求解。**注意:**对于-a的处理是变成0-a的形式。中两个长度相同的 非空 子序列的最大点积。
2024-11-05 16:47:56
376
原创 力扣11.4
这题可以转化为分组背包,预处理每个栈的前缀和,每个前缀和实际就是每个组的物品,且每组只能选一个。交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空。次操作的前提下,你钱包里硬币面值之和 最大为多少。个栈里 从顶到底 的硬币面值。每个栈有 正整数 个带面值的硬币。每一次操作中,你可以从任意一个栈的 顶部 取出。每步 可以删除任意一个字符串中的一个字符。个硬币,从栈中移除它,并放入你的钱包里。求出两个单词的最长公共子序列长度为。,请你返回在 恰好 进行。相同所需的最小步数。
2024-11-04 21:18:17
872
原创 力扣11.3
需要注意的是,每一行都必须选元素,因此只能使用上一轮的状态,需要两个dp合并使用,否则会受之前状态的影响。从矩阵的 每一行 中选择一个整数,你的目标是 最小化 所有选中元素之 和 与目标值。分组背包,将被一行的元素看作一组,每次只能选一行中的一个元素,朴素dp做法是令。将dp数组转换成一个二进制数,若二进制数的第i位为1,则说明体积为j的方案存在。,请返回投掷骰子的所有可能得到的结果(共有。种方式),使得骰子面朝上的数字总和等于。为选择前i行,元素之和为j的方案是否存在。个一样的骰子,每个骰子上都有。
2024-11-03 15:06:16
1068
原创 力扣11.2
给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time ,分别表示给 n 堵不同的墙刷油漆需要的开销和时间。最初的dfs思想是dfs(i,j,k)表示要刷即将i+1-n的墙,当前付费时间为j,免费时间为k的最少开销,考虑dfs的边界条件。我们发现每次比较的都是付费时间和免费时间的相对大小,因此可以将付费时间和免费时间合并为两者的差值。使用01背包进行分析,我们考虑什么时候能选择第i个付费粉刷匠,总墙数维j,需要满足,此时。,前i个物品,体积至少为j的价值为多少。再使用滚动数组优化一下。
2024-11-02 16:00:48
879
原创 力扣11.1
此时若第一个集合方案有{1}{2}{3}{4}{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}{1,2,3}{1,2,4}{1,3,4}{2,3,4}{1,2,3,4},对于集合1为{1}的情况,集合2为{2,3,4},但是{2,3,4}也在集合1的方案中,因此实际此时已经包含了集合1:{1}集合2:{2,3,4},和集合1:{2,3,4},集合2:{1}的情况,但是最后err仍然乘了2,所以多算了一倍。(其中n为nums的个数),因为集合一和二若互换元素也算一种方案,最后不合法方案。
2024-11-01 15:07:16
709
原创 力扣10.31
你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。返回 广告牌的最大可能安装高度。如果没法安装广告牌,请返回。为前i个能量为j的子序列数目和,我们考虑添加第的第i个数的性质。个rod,差值为j的最大安装高度和,最后的结果即为。一个整数数组的 能量 定义为和 等于。,则可以将它们焊接在一起形成长度为。你有一堆可以焊接在一起的钢筋。举个例子,如果钢筋的长度为。由于答案可能很大,请你将它对。中所有子序列的 能量和。
2024-10-31 13:23:01
1046
原创 力扣10.29
输入一个有向图,该图由一个有着 n 个节点(节点值不重复,从 1 到 n)的树及一条附加的有向边构成。每个元素是一对 [ui, vi],用以表示 有向 图中连接顶点 ui 和顶点 vi 的边,其中 ui 是 vi 的一个父节点。在本问题中,有根树指满足以下条件的 有向 图。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。返回一条能删除的边,使得剩下的图是有 n 个节点的有根树。并查集,由于这题是有向图,需要对并查集动下手脚,每次只将子节点归到父节点中,因此不能对子节点进行路径压缩。
2024-10-29 11:50:15
837
1
原创 力扣10.27
给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edges[i] = [ai, bi] 表示图中在 ai 和 bi 之间存在一条边。请找出一条可以删去的边,删除后可使得剩余部分是一个有着 n 个节点的树。如果有多个答案,则返回数组 edges 中最后出现的那个。树可以看成是一个连通且 无环 的 无向 图。
2024-10-27 16:03:06
232
原创 力扣10.26
最初,你的总奖励 x 为 0,所有下标都是 未标记 的。给你一个整数数组 rewardValues,长度为 n,代表奖励的值。以整数形式返回执行最优操作能够获得的 最大 总奖励。将一维数组压缩成一个二进制数f,从低到高若第i位为。个的状态,因此可以使用滚动数组优化掉i这一维。因此若转化为二进制数f,实际是将f的低。,因此还得优化,考虑使用bitset。能否从前i个数中获得总奖励为。具体来说可以这样变,下式中。,在执行上面的状态转移时。
2024-10-26 15:46:55
650
原创 力扣10.21
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。
2024-10-21 11:55:24
857
原创 力扣10.19
01背包,将每个数的价值看作是1,背包容量为target,令dp[i][j]为前i个数容量正好为j是的长度,这道题和普通01背包不同就在于需要正好是j,因此需要将其他的不合法状态设置为一个极小值,其他就按照正常01背包套路来写,然后可以利用轮动数组优化一下。考虑10110这个元素,要使下标为[2:]的元素均为1,必须得先把[3:]的元素变为0,因此考虑从尾向头遍历,若当前位置为1且不是首部,则反转它和后面的,若当前位置为0,也进行翻转。反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0。
2024-10-19 15:24:11
1056
原创 力扣10.18
记忆化收缩,令dfs(i,j)表示perm[0]到perm[i]的逆序对数量为j的排列个数,首先对req数组进行预处理,若在i处没有逆序对要求,则将其req设为-1,否则设为对应的值,接下来分两种情况讨论。使用记忆化搜索来解决,令dfs(i,j,k)表示机器人1,2分别从(i,j)和(i,k)处开始到最后一行的樱桃数目最大值,容易得到。你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。表示这个要求中的末尾下标和 逆序对 的数目。
2024-10-18 23:08:22
890
原创 力扣10.13
如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。每次操作,你可以取一枚 没有碎 的鸡蛋并把它从任一楼层。,以此类推,因此只需要判断最后的层数是否超过建筑高即可。楼层或比它低 的楼层落下的鸡蛋都 不会碎。函数传入操作次数k,可以发现,最优情况一定先在。确切的值 的 最小操作次数 是多少?的楼层落下的鸡蛋都 会碎 ,从。枚相同 的鸡蛋,和一栋从第。请你计算并返回要确定。
2024-10-13 15:10:00
528
原创 力扣10.12
如果下面 任意 条件为 真 ,那么这个括号字符串就是 合法的。给你一个 的括号网格图矩阵。令dp[i][j]表示选择points[i][j]的最大得分,暴力枚举上一行的所有列k,则。然而,相邻行之间被选中的格子如果隔得太远,你会失去一些得分。如果网格图中存在一条 合法括号路径 ,请返回 ,否则返回。你的得分方式为:每一行 中选取一个格子,选中坐标为。路径经过的格子组成的括号字符串是 合法 的。的最大值,这个可以用两个一维数组表示,,你想最大化从矩阵中得到的分数。的格子,你的总得分 减少。
2024-10-12 12:18:15
694
原创 力扣10.11
枚举倍数,记录nums1和nums2每个数字出现的个数记录在cnt1和cnt2中,对于nums2的每个数kk,枚举它的倍数,与k相乘后去cnt1中找,最后答案加上对应的值。返回 优质数对 的总数。
2024-10-11 13:57:07
306
原创 极客兔兔Gee-Cache Day7
下载最先版本的发布包安装。解压后将解压路径下的 bin 目录 加入到环境变量即可。如果能正常显示版本,则表示安装成功。函数,将输入参数转为。
2024-10-10 21:05:53
486
原创 力扣10.10
请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递增 的路径数目。由于答案可能会很大,请将结果对。对于每个单元格,你可以往上,下,左,右四个方向移动。你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。大致思路和上题差不多,令dp[i][j]为以(i,j)为终点的路径条数,初始化。如果两条路径中访问过的格子不是完全相同的,那么它们视为两条不同的路径。,找出其中 最长递增路径 的长度。,你可以从一个格子移动到。个方向相邻的任意一个格子。遍历四个方向,状态转移如下。
2024-10-10 14:57:56
1133
原创 力扣10.9
的 绝对差 尽可能 小。换言之,你需要选择一个子数组。子数组 是数组中连续的 非空 元素序列。,满足子数组中所有元素按位或运算。请你返回 最小 的绝对差值。
2024-10-09 13:25:46
363
原创 极客兔兔Gee-Cache Day5
需要实现http的客户端,对于缓存未命中时,需要向远程节点请求数据,此时被作为客户端,中实现的一致性哈希过程,由于这些需要实现互斥访问哈希表,因此还需要一个。接口,前者用来找到对应的远程节点(由于每个远程节点对应一个。一一对应,找到PeerGetter就找到对应的远程节点。方法,用来请求远程节点的数据,重写一下。实现了服务端的代码,需要再加上客户端。管理客户端的所有过程,因此需要加入。函数,该函数返回远程节点对应的。对应的远程节点,远程节点和。接口,实现了其需要实现的。ReadAll`获取。
2024-10-08 23:02:42
1317
原创 力扣10.8
有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康点数)。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。注意:任何房间都可能对骑士的健康点数造成威胁,也可能增加骑士的健康点数,包括骑士进入的左上角房间以及公主被监禁的右下角房间。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。
2024-10-08 11:30:42
776
原创 力扣10.7
假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。贪心,对于每次油不足时,优先选择之前所有的加油站中加油量最多的,使用优先队列进行维护。为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1。汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。
2024-10-07 22:14:05
250
原创 力扣10.6
前缀和+双指针,只要满足大小为n的区间内,所有的加油站都能正常通过,预处理油和花费的前缀和,只需要保证每个点处油的前缀和比花费前缀和大就行,若有一个点不存在,则左指针到达他下一个加油站的位置。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。出发,每一步只能往 下 或者往 右 ,你想要到达终点。你从其中的一个加油站出发,开始时油箱为空。整除的路径数目,由于答案可能很大,返回答案对。如果存在解,则 保证 它是 唯一 的。你有一辆油箱容量无限的的汽车,从第。后的路径数量,状态转移如下。
2024-10-06 17:47:30
1210
原创 极客兔兔Gee-Cache Day4
缓存在同一时刻全部失效(例如设置相同过期时间,服务器宕机),均需要去访问DB,造成DB瞬间访问量过大。需要实现一致性哈希的过程,一致性哈希的主要结构由。
2024-10-05 20:48:37
580
原创 极客兔兔GeeCache Day3
三个参数,第一个是字符串,第二个是分隔符,第三个是将字符串分割后的最大串数目。传入两个参数,第一个参数是服务启动的地址,第二个参数是一个。,接受用户请求,一般来说,大部分网站的。作为前缀,这是为了区分不同的服务,因此。用来表示前缀,本例中是。
2024-10-05 15:42:16
345
原创 力扣10.5
每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。二分答案,存在一个时间t,在小于t的时候公交车无论如何都无法完成任务,而大于等于t的时候肯定有一种方法可以完成任务,因此只需要二分查找这个点,注意一下二分查找的写法。请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。,表示所有公交车 总共 需要完成的旅途数目。
2024-10-05 14:29:33
1147
原创 极客兔兔Gee-Cache Day2
Go 语言标准库提供的一个互斥锁,当一个协程(goroutine)获得了这个锁的拥有权后,其它请求锁的协程(goroutine) 就会阻塞在。价值:能将普通的函数类型作为参数,也能将结构体作为参数,使用更为灵活。(例如学生成绩和学生课程的缓存使用不同的name区分)未命中时会调用回调函数查找数据库中的内容,同时,使用。:与外部交互,在缓存未命中时去查找数据源。加入了锁机制,实现并发下的互斥访问,方法的调用上,直到调用。由四个文件组成,分别是。结构分配多个缓存,用。
2024-10-04 22:15:37
586
原创 力扣10.4
给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n ,由从 0 到 m * n - 1 的不同整数组成。如果你位于单元格 (x, y) ,且满足 x < m - 1 ,你可以移动到 (x + 1, 0), (x + 1, 1), …每次可能的移动都需要付出对应的代价,代价用一个下标从 0 开始的二维数组 moveCost 表示,该数组大小为 (m * n) x n ,其中 moveCost[i][j] 是从值为 i 的单元格移动到下一行第 j 列单元格的代价。返回 最大非负积 对。
2024-10-04 14:56:28
1121
原创 极客兔兔Gee-Cache Day1
使用list和map实现,cache中记录缓存最大容量和当前数据大小,对于刚访问的元素,将其移到list的最头部,表示最近刚使用过,删除时选择最尾部的数据进行删除,entry实际是list的节点数据类型,在删除对应节点后,同时删除map中的数据,实现查找、删除、增加、修改功能。:一个高并发的请求查询一个缓存中不存在的数据项,因此这个请求穿透缓存直接到达后端数据库或数据源来获取数据。如果这种请求非常频繁,就会导致后端系统的负载突然增加,可能会使数据库或数据源响应变慢甚至宕机,从而影响整个系统的性能和稳定性。
2024-10-03 21:49:49
536
原创 力扣10.3
两个城市之间可能会有多条耗费时间不同的道路,但是不会有道路两头连接着同一座城市。旅行的 费用 为你经过的所有城市 通行费之和 (包括 起点和终点城市的通行费)。,题目保证 所有城市 都由双向道路 连接在一起。,请你找出从起点到终点成功概率最大的路径,并返回其成功概率。开始)组成的无向加权图,该图由一个描述边的列表组成,其中。每次经过一个城市时,你需要付通行费。,请你返回完成旅行的 最小费用 ,如果无法在。的一条无向边,且该边遍历成功的概率为。分钟以内完成旅行,请你返回。的最小费用,状态转移如下。
2024-10-03 16:40:24
1311
原创 力扣10.2
表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐。每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历。三个单元格中任一满足值 严格 大于当前单元格的单元格。返回你在矩阵中能够 移动 的 最大 次数。趟列车的行驶距离(单位是千米)。生成的测试用例保证答案不超过。的 小数点后最多存在两位数字。,矩阵由若干 正 整数组成。
2024-10-02 14:40:44
267
原创 力扣10.1
在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。返回 你想要完成在给定的列表 days 中列出的每一天的旅行所需要的最低消费。
2024-10-01 14:49:39
894
原创 力扣9.30
分类讨论,两种情况,对于k=1的情况,直接在长度为n的数组上做一次子数组最大和,对于k>1的情况,可能会出现起点和终点不在同一个区间内,因此需要对数组进行复制,而对于中间是否需要加上一整段区间,只需要看数组的和是否为正数,若是正数,则一定可以将整段区间插入到起点和终点之间。最大子数组和的变式,可以求处最大子数组和和最小子数组和,然后取绝对值的。中 和的绝对值 最大的任意子数组(可能为空),并返回该 最大值。返回修改后的数组中的最大的子数组之和。,在这种情况下它的总和也是。,那么修改后的数组将是。
2024-09-30 11:07:41
440
原创 力扣9.29
首先将第k个人移到尾部,并更新初始条件,此时只需要找每一轮剩下的人数,由于全都在第k个人前面,因此每一轮答案加上的权重就是剩下的人数,可以排序,每次找剩下的人中票数最小的人群,然后在答案一次性加上他们所贡献的时间并删除他们。一个人 一次只能买一张票 ,如果需要购买更多票,他必须走到 队尾 重新排队(瞬间 发生,不计时间)。如果一个人没有剩下需要买的票,那他将会 离开 队伍。(下标从 0 开始)的人完成买票需要的时间(以秒为单位)。个人前来排队买票,其中第。人站在队伍 最前方 ,第。人站在队伍 最后方。
2024-09-29 11:55:46
250
原创 洛谷9.27
某大学有n个职员,编号为1n。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数ri,但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。
2024-09-27 10:14:07
820
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人