CodeClimb
路虽远,行则将至!
展开
-
【华为OD-E卷 -123 判断一组不等式是否满足约束并输出最大差 100分(python、java、c++、js、c)】
计算 diff[i] = sum(a[i][j] * x[j]) - b[i],即线性表达式的值与目标值 b[i] 之差。satisfies_constraint(diff, y[i]) 判断 diff 是否符合 y[i] 约束。sum(a[i][j] * x[j] for j in range(5)) 计算线性表达式的值。cs(约束类型):第六个子数组,长度 3,存储不等式的符号,如 “>=”、“<=”` 等。var(变量值):第四个子数组,长度 5,表示 x1,x2,x3,x4,x5 的值。原创 2025-03-17 18:07:02 · 899 阅读 · 0 评论 -
【华为OD-E卷 -122 字符统计及重排 100分(python、java、c++、js、c)】
维护一个 最大堆 进行 自定义排序,用于 按照频次降序排列,时间复杂度 O(m log m)(m 为不同字符数)。基于比较器的排序(cmp_to_key):时间复杂度 O(m log m),其中 m 为不同字符的数量。map 采用 红黑树(RB-Tree) 实现,插入元素的复杂度 O(log m),m 为不同字符数。由于 TreeMap 自动排序,默认 字典序 排序键(字符),但不影响自定义排序。哈希表(字典):用于统计字符频次,时间复杂度为 O(n)(n 为字符串长度)。原创 2025-03-17 15:19:32 · 915 阅读 · 0 评论 -
【华为OD-E卷 -121 消消乐游戏 100分(python、java、c++、js、c)】
这里采用 并查集(Disjoint Set Union,DSU) 进行 连通区域合并和计数,避免使用递归的 DFS 可能带来的栈溢出问题,并且比 BFS 更高效。如果发现新的 1,说明找到了一块新的区域,执行 bfs(),并增加 clicks 计数。遍历整个矩阵,遇到 1 且未访问的点时,说明找到了一块新的连通区域(需要点击一次)。调用 dfs() 方法,以该 1 为起点,递归访问所有相邻的 1,并标记为已访问。遍历矩阵,每次遇到新的 1,说明找到了一块新区域,需要进行 DFS 访问并计数。原创 2025-03-16 17:10:00 · 155 阅读 · 0 评论 -
【华为OD-E卷 - 120 分割数组的最大差值 100分(python、java、c++、js、c)】
遍历每个可能的分割点 i,计算 prefix_sum[i] 和 suffix_sum[i+1] 的差值,取其绝对值。遍历所有可能的分割点 i,计算 prefixSum[i] 和 suffixSum[i + 1] 的差值,取其绝对值。使用 prefixSum 数组来存储前缀和,prefixSum[i] 表示从数组开始到第 i 个元素的总和。前缀和(prefix_sum):prefix_sum[i] 表示从数组开始到第 i 个元素的总和。左部分的和:leftSum = prefixSum[i]。原创 2025-02-10 16:03:57 · 1013 阅读 · 0 评论 -
【华为OD-E卷 - 119 评论转换输出 100分(python、java、c++、js、c)】
第一条评论是"helo,2,ok,0,bye,0",第二条评论是"test,0",第三条评论是"one,1,two,1,a,0"。所有评论被保存成"hello,2,ok,0.bye,0,test,0,one,1,two,1,a,0"。对于上述格式的评论,请以另外一种格式打印:首先打印评论嵌套的最大深度。然后是打印n行,第 i (1 ≤ i ≤ n) 行对应于嵌套级别为 i 的评论 (根评论的嵌套级别为1)。对于第 i 行,嵌套级别为的评论按照它们出现的顺序打印,用空格分隔开。原创 2025-02-10 15:59:48 · 1223 阅读 · 0 评论 -
【华为OD-E卷 - 118 路灯照明问题 100分(python、java、c++、js、c)】
第 i 盏灯的位置在 i * 100 这个坐标点上,照明区间为 [i * 100 - arr[i], i * 100 + arr[i]]。如果当前区间的起始位置 start 大于 current_end,说明这两个区间之间有未被照亮的部分,累加未照亮的长度。如果当前区间的起始位置 start 大于 currentEnd,说明两个区间之间存在未被照亮的区域,累加该未照亮的长度。构建照明区间:根据每盏灯的位置和照明半径,构建对应的区间 [start, end]。原创 2025-02-07 14:47:21 · 1058 阅读 · 0 评论 -
【华为OD-E卷 -117 招聘 100分(python、java、c++、js、c)】
如果最早结束的池子(即 heap 中的最小值)结束时间小于等于当前任务的开始时间,则表示该池子可以容纳当前任务,更新该池子的结束时间。如果当前池子未满,且池子中最后一个任务的结束时间小于等于当前任务的开始时间,则将任务放入该池子。如果池子未满,且池子中最后一个任务的结束时间小于等于当前任务的开始时间,则将任务放入该池子。同一个池子中的任务不能时间重叠,即后一个任务的开始时间必须大于等于前一个任务的结束时间。同一个池子中的任务不能时间重叠,即后一个任务的开始时间必须大于等于前一个任务的结束时间。原创 2025-02-07 14:42:51 · 896 阅读 · 0 评论 -
【华为OD-E卷 -116 欢乐的周末 100分(python、java、c++、js、c)】
深度优先搜索(DFS):从每个起点开始,使用 DFS 标记所有能够到达的点,分别记录华和卫能到达的位置。统计结果:遍历整个网格,对于每个标记为 3 的位置,如果华和卫都能到达,则计数加一。找到起点:分别找到两个起点(假设输入中有两个标记为 2 的点)。计算从华的起点和卫的起点分别能到达的 3 的位置。输出交集的大小,即两个都能到达的 3 位置的数量。取两个集合的交集,得到两个都能到达的关键地点。输出:输出能够被两个人都到达的关键地点的数量。3 为被选中的聚餐地点(非障碍物)3:关键地点(需要统计的地点)。原创 2025-02-06 21:08:58 · 533 阅读 · 0 评论 -
【华为OD-E卷 - 高频题目全览 (关注、收藏)通过率100%以上题目可达95%(python、java、c++、js、c)】
E 算法题库目录全集 持续更新中原创 2025-02-06 11:53:01 · 1600 阅读 · 0 评论 -
【华为OD-E卷 - 115 数组组成的最小数字 100分(python、java、c++、js、c)】
比较 a + b 和 b + a,如果 a + b 小于 b + a,则 a 应该排在 b 前面。比较 a + b 和 b + a,如果 a + b 小于 b + a,则 a 应该排在 b 前面。例如,“30” 和 “3”,因为 “303” < “330”,所以 “30” 应该在前。例如,“30” 和 “3”,因为 “303” < “330”,所以 “30” 应该在前。例如,“30” 和 “3”,因为 “303” < “330”,所以 “30” 应该在前。原创 2025-02-05 11:31:56 · 896 阅读 · 0 评论 -
【华为OD-E卷 - 114 找最小数 100分(python、java、c++、js、c)】
在遍历 num 时,如果当前字符比 result 的栈顶元素小,并且还可以删除数字(toRemove > 0),那么就弹出栈顶元素(减少 toRemove 的值),从而让剩下的数字形成更小的值。由于可能会出现前导 0,如 “10200” 移除 1 个字符后可能变成 “0200”,所以要去掉前导 0,如果去掉后字符串为空,则返回 “0”。如果当前字符比 stack(单调递增栈)的栈顶元素小,并且仍然可以删除数字,就弹出栈顶元素(删除较大的数)。只要栈的第一个元素是 0 且长度大于 1,就不断弹出前面的 0。原创 2025-02-05 11:25:53 · 1070 阅读 · 0 评论 -
【华为OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】
【代码】【华为OD-E卷 - 跳格子2 100分(python、java、c++、js、c)】原创 2025-02-04 02:55:03 · 733 阅读 · 0 评论 -
【华为OD-E卷 - 112 任务最优调度 100分(python、java、c++、js、c)】
如果最频繁的任务的出现次数为 max_freq,那么这类任务之间的间隔时间为 (max_freq - 1) * (cool_down + 1),其中 (max_freq - 1) 是其他任务间隔的数量,cool_down + 1 是任务间隔时间(冷却时间加上任务本身的执行时间)。如果最频繁任务的出现次数是 maxFreq,那么这些任务之间至少需要 (maxFreq - 1) * (coolDown + 1) 的时间。这样可以方便地找出任务中出现次数最多的任务,以及有多少个任务的频次相同。原创 2025-02-04 02:44:51 · 1358 阅读 · 0 评论 -
【华为OD-E卷 - 111 事件推送 100分(python、java、c++、js、c)】
移动 indexB:当 setB[indexB] < valueA,指针右移,确保 setB[indexB] 是大于或等于 valueA 的最小值。若 setB[indexB] - valueA ≤ r,则输出 valueA 和 setB[indexB]使用 find_closest(ai, b) 查找 b 中最接近的索引 idx。若 b[mid] > val,搜索左半部分(right = mid - 1)。若 |b[idx] - ai| ≤ r,则输出 ai 和 b[idx]原创 2025-02-03 09:00:00 · 754 阅读 · 0 评论 -
【华为OD-E卷 - 110 数字涂色 100分(python、java、c++、js、c)】
最终返回 1 + find_colors(filtered),其中 1 代表当前颜色组,find_colors(filtered) 递归计算剩余部分的颜色组数。遍历 numbers[j](j > i),如果 numbers[j] 是 numbers[i] 的倍数,则将其标记为已使用 used[j] = true。used[i] == true 表示 numbers[i] 已经被归类到某个颜色组,不需要再考虑。任何一个颜色组中的所有数字,都不能是另一个数字的倍数。需要最少的颜色数,即尽可能少的组数。原创 2025-02-03 09:00:00 · 1360 阅读 · 0 评论 -
【华为OD-E卷 - 109 磁盘容量排序 100分(python、java、c++、js、c)】
使用 sort() 方法,自定义 Comparator 进行排序,比较 computeValue(a) 和 computeValue(b)。本程序的目标是对存储容量进行排序,输入的存储容量包含 M(MB),G(GB),T(TB) 等单位,排序时需按照实际大小进行比较。使用 sort() 方法,调用 compare() 进行排序,比较 calc(a) 和 calc(b)。其中m表示容量大小,v表示容量单位,例如20M,1T,30G,10G6T,3M12G9M。原创 2025-02-02 23:20:39 · 1086 阅读 · 0 评论 -
【华为OD-E卷 - 108 最大矩阵和 100分(python、java、c++、js、c)】
本代码的目标是在 rows × cols 的二维矩阵中找到最大子矩阵的和,采用 Kadane’s Algorithm(卡丹算法) 进行优化计算。维护一个 colSum 数组,存储 top 到 bottom 之间的列和,将二维问题转换为一维最大子数组和问题。使用 colSum[col] 存储 top 到 bottom 之间的列和,将二维问题压缩为一维最大子数组和问题。使用 colSum[col] 存储 top 到 bottom 之间的列和,将二维问题压缩为一维最大子数组和问题。原创 2025-02-02 23:15:22 · 1245 阅读 · 0 评论 -
【华为OD-E卷 - 107 连续出牌数量 100分(python、java、c++、js、c)】
第一行是每张手牌的数字,数字由空格分隔, 第二行为对应的每张手牌的颜色,用r y b g这4个字母分别代表4种颜色,字母也由空格分隔。第二行 shades 代表所有牌的花色(如 [‘H’, ‘D’, ‘H’])。第一行 values 代表所有牌的值(如 [‘A’, ‘2’, ‘3’])。如果当前牌 cur 和上一张牌 prev 不符合值或颜色相同的规则,则跳过。然后读取一行字符,表示牌的颜色,存入 cards[i].color。先读取一行整数,表示牌的数字,存入 cards[i].num。原创 2025-02-01 18:15:25 · 1257 阅读 · 0 评论 -
【华为OD-E卷 - 106 报数游戏 100分(python、java、c++、js、c)】
每当 count == m 时,淘汰该人(设置 removed[currentIndex] = true),重置 count 并减少 remaining。使用 Array.from({ length: 100 }, (_, i) => i + 1) 创建 1~100 的编号数组。计算下一轮被淘汰者的索引位置:idx = (idx + m - 1) % people.size();遍历 removed 数组,跳过已淘汰的人,只对未淘汰的人进行报数。使用 splice(index, 1) 移除该索引处的人。原创 2025-02-01 17:59:17 · 951 阅读 · 0 评论 -
【华为OD-E卷 - 105 数组二叉树 100分(python、java、c++、js、c)】
给定一个以数组形式表示的完全二叉树(从索引 1 开始表示节点,-1 表示空节点),找到所有叶子节点中值最小的叶子节点。注意第一个元素即为根节点的值,即数组的第N个元素对应下标N,下标0在树的表示中没有使用,所以我们省略了。给定一个以数组形式表示的完全二叉树,数组的第 i 个元素表示树中某个节点的值,值为 -1 表示节点为空。找出所有叶子节点中值最小的那个,然后输出从根节点到该叶子节点的路径。找出所有叶子节点中值最小的节点,并输出从根节点到该叶子节点的路径。遍历所有叶子节点,找出值最小的那个节点的索引。原创 2025-01-31 09:00:00 · 652 阅读 · 0 评论 -
【华为OD-E卷 - 104 最佳植树距离 100分(python、java、c++、js、c)】
二分查找范围:O(log(max_distance)),其中 max_distance = positions[-1] - positions[0]。如果两棵树之间的最小距离为 d,那么放置树时应尽可能满足每两棵树之间的间距都大于或等于 d。遍历 positions,贪心地放置树,确保每棵树之间的距离不小于给定的 min_dist。遍历位置数组时,尽可能选择与上次放置的位置间距大于或等于 d 的位置放置树。按顺序放置树,确保每棵树之间的距离不小于给定的最小距离 minDist。否则返回 False。原创 2025-01-31 09:00:00 · 1066 阅读 · 0 评论 -
【华为OD-E卷 - 103 分积木 100分(python、java、c++、js、c)】
给定一个整数数组 weightArray,需要判断是否可以将数组划分为多个部分,使得这些部分的 XOR 和为 0。如果整个数组的 XOR 和 xor_sum 不为 0,则无法划分为 XOR 和为 0 的子数组。如果一个数组的 XOR 和为 0,可以通过适当划分,使得子数组的 XOR 和也为 0。如果 xor_sum = 0,则划分可能存在。如果整个数组的 XOR 和不为 0,无法划分为 XOR 和为 0 的部分。如果 XOR 和为 0,可以划分,将数组的总和减去最小值,作为输出结果。原创 2025-01-30 09:00:00 · 800 阅读 · 0 评论 -
【华为OD-E卷 - 102 字符串化繁为简 100分(python、java、c++、js、c)】
说明 等效字符集为(‘a’, ‘A’, ‘b’),输入字符里没有被小括号包含的子字符串集合为"abcdefgAC",将其中字符替换为字典序最小的等效字符后输出为:“AAcdefgAC”合并等价集合:如果两个集合中有字符相同或字符大小写等价(如 ‘a’ 和 ‘A’),则将它们合并为一个集合。任务是将字符串中所有等价字符替换为其字典序最小的字符,并输出替换后的字符串。替换规则:对于每个等价集合,用集合中字典序最小的字符替换所有等价字符。遍历等价集合,将集合中的字符替换为集合中字典序最小的字符。原创 2025-01-30 09:00:00 · 824 阅读 · 0 评论 -
【华为OD-E卷 - 100 最长方连续方波信号 100分(python、java、c++、js、c)】
说明:一个完整的信号一定以0开始然后以0结尾,即010是一个完整信号,但101,1010,0101不是 输入的一串方波信号是由一个或多个完整信号组成 两个相邻信号之间可能有0个或多个低位,如0110010,011000010 同一个信号中可以有连续的高位,如01110101011110001010,前14位是一个具有连续高位的信号 完全连续交替方波是指10交替,如01010是完全连续交替方波,0110不是。原创 2025-01-29 09:00:00 · 612 阅读 · 0 评论 -
【华为OD-E卷 - 93 VLAN资源池 100分(python、java、c++、js、c)】
说明 原VLAN资源池中有VLAN 1、2、3,5,申请的VLAN 10不在原资源池中,将原资源池按照题目描述格式并按升序排序后输出的结果。任务是解析用户输入的 VLAN 列表(格式可能为单个数字或范围,如 1,3-5,8),将其转换为有序的 VLAN 列表。从 VLAN 池中删除指定的 VLAN 后,输出更新后的 VLAN 范围,格式与输入保持一致。支持删除指定的 VLAN,并输出删除后的结果,结果需重新格式化为范围形式。更新后的 VLAN 范围池,按逗号分隔,格式化为单个数字或范围。原创 2025-01-25 10:40:37 · 1117 阅读 · 0 评论 -
【华为OD-E卷 - 101 转骰子 100分(python、java、c++、js、c)】
骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次), 可以向右翻转(用R表示向右翻转1次), 可以向前翻转(用F表示向前翻转1次), 可以向后翻转(用B表示向后翻转1次), 可以逆时针旋转(用A表示逆时针旋转90度), 可以顺时针旋转(用C表示顺时针旋转90度), 现从123456这个初始状态开始,根据输入的动作序列,计算得到最终的状态。骰子的初始状态和初始状态转动后的状态如图所示。输原创 2025-01-29 09:00:00 · 1105 阅读 · 0 评论 -
【华为OD-E卷 - 99 字符串解密 100分(python、java、c++、js、c)】
目标是从字符串 str1 中找到一个最长的子串,且该子串中的唯一字符数量不能超过字符串 str2 中的唯一字符数量。遍历 s2 中的所有字符,统计唯一字符的数量,作为字符种类限制 targetCount。遍历提取出的所有子串,检查其唯一字符数量是否小于或等于 str2 中的唯一字符数量。返回符合条件的最长子串;遍历切分出的所有子串,筛选出唯一字符数不超过 str2 中唯一字符数的子串。子字符串中不同字符的数量不超过字符串 s2 的字符种类数。如果筛选后有符合条件的子字符串,返回最符合条件的字符串。原创 2025-01-28 09:00:00 · 1079 阅读 · 0 评论 -
【华为OD-E卷 - 98 数字加减游戏 100分(python、java、c++、js、c)】
【代码】【华为OD-E卷 - 数字加减游戏 100分(python、java、c++、js、c)】原创 2025-01-28 09:00:00 · 842 阅读 · 0 评论 -
【华为OD-E卷 -97 基站维修工程师 100分(python、java、c++、js、c)】
3 {站点数} 0 2 1 {站点1到各站点的路程} 1 0 2 {站点2到各站点的路程} 2 1 0 {站点3到各站点的路程}遍历生成的路径集合 paths,逐一计算路径的总距离。u,访问过的点集合为 mask 时的最短路径长度。定义 dp[u][mask] 表示当前在点。使用 find_paths 递归生成从点。通过逐步扩展访问点的集合,从只访问起点。在遍历过程中更新最小路径总距离。0 开始,逐步扩展到访问所有点。0 出发、经过所有点的路径。返回最小距离作为最终结果。原创 2025-01-27 09:00:00 · 820 阅读 · 0 评论 -
【华为OD-E卷 - 96 分奖金 100分(python、java、c++、js、c)】
公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得“距离 * 数字差值”的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。例如,按照工号顺序的随机数字是:2,10,3。那么第2个员工的数字10比第1个员工的数字2大,所以,第1个员工可以获得 1(10-2)= 8。原创 2025-01-27 09:00:00 · 699 阅读 · 0 评论 -
【华为OD-E卷 - 95 光伏场地建设规划 100分(python、java、c++、js、c)
定义二维前缀和数组 prefixSum,其中 prefixSum[i][j] 表示从网格的左上角 (0, 0) 到 (i-1, j-1) 之间的所有元素总和。对于任意一个子矩形,其左上角为 (i, j),右下角为 (i+size-1, j+size-1),可以通过前缀和快速计算总和。需要统计大小为 size x size 的所有子矩形(子网格)中,总和不小于给定阈值 threshold 的子矩形的数量。表示调研的区域大小为长 2 宽 5 的矩形,我们要建设的电站的边长为 2,建设电站最低发电量为 6。原创 2025-01-26 09:00:00 · 1049 阅读 · 0 评论 -
【华为OD-E卷 - 94 查找充电设备组合 100分(python、java、c++、js、c)】
选择当前物品(如果其能力值不超过剩余容量):结果为 powers[index] + findMax(index + 1, remainingPower - powers[index])。如果选择当前物品,更新 dp[j] = max(dp[j], dp[j - powerOutputs[i]] + powerOutputs[i])。如果选择当前能力值 power,更新 dp[j] = max(dp[j], dp[j - power] + power)。原创 2025-01-26 09:00:00 · 839 阅读 · 0 评论 -
华为OD-E卷 - 92 跳格子游戏 100分(python、java、c++、js、c)】
需要判断是否可以访问图中的所有节点,即判断图是否是一个有向无环图(DAG),并且是否所有节点都可以通过拓扑排序访问。统计访问的节点数: 如果访问的节点数等于图的节点总数 n,说明可以访问所有节点,否则不能。如果最终访问的节点数等于图中的节点总数,则可以访问所有节点,返回 “yes”。给定一个有 n 个节点的有向图,每条边表示从一个节点可以跳到另一个节点。入度为 0 的节点入队: 初始将所有入度为 0 的节点加入队列。将所有入度为 0 的节点加入队列,这些节点可以作为起点。原创 2025-01-25 09:00:00 · 805 阅读 · 0 评论 -
【华为OD-E卷 - 91 寻找符合要求的最长子串 100分(python、java、c++、js、c)】
如果窗口内的某个字符出现次数超过 2,则移动 left 指针以收缩窗口,直到条件满足。如果某字符在窗口内的计数超过 2,则移动 left 指针收缩窗口,直到计数满足条件。当窗口内的字符出现次数超过 2 时,收缩窗口(移动 left 指针)直到满足条件。直接跳过该字符,清空窗口内的字符计数,并将 left 指针移动到当前字符之后。如果某字符在窗口内的计数超过 2,移动 left 指针收缩窗口,直到条件满足。使用滑动窗口技术和一个哈希表来统计窗口内字符的出现次数。原创 2025-01-25 09:00:00 · 715 阅读 · 0 评论 -
【华为OD-E卷 - 90 垃圾信息拦截 100分(python、java、c++、js、c)】
给定一个消息记录的列表,记录的形式为 (sender, receiver),表示某个发送者向某个接收者发送了一条消息。对于每个接收者,如果 tid 发送给该接收者的消息数量比从该接收者接收到的消息多出 5 条,则判定为垃圾发送者。对任意接收方,如果 tid 向其发送的消息数量比从其接收的消息数量多 5 条以上,则为垃圾发送者。对任意接收者,如果发送消息数量比接收到的消息数量多 5 条以上,则判定为垃圾发送者。目标用户对某个接收者发送的消息数量比从该接收者接收到的消息数量多出 5 条。原创 2025-01-24 09:00:00 · 1280 阅读 · 0 评论 -
【华为OD-E卷 - 89 计算网络信号 100分(python、java、c++、js、c)】
6 5 0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 4 代表如下地图。信号可以向上下左右传播,每传播一步信号值减 1,直至信号值为 0 时停止传播。若某位置信号值尚未覆盖(为 0),则更新该位置信号值为 当前信号 - 1;从队列中取出信号源,向其上下左右的方向传播信号,直到信号减弱为 0。从信号源开始,依次向上下左右传播信号,更新网格中各位置的信号强度。若更新后的信号值仍大于 0,将该位置加入队列以继续传播。原创 2025-01-24 09:00:00 · 883 阅读 · 0 评论 -
【华为OD-E卷 - 80 第k个排列 100分(python、java、c++、js、c)】
n] 这些数字中生成的所有排列中,按字典序第 k 小的排列。可以计算出当前排列的起始数字的索引。确定第 i 位数字时,根据当前剩余排列数量可以计算该位应该选取的数字。给定 n 的范围是[1, 9], 给定 k 的范围是[1, n!对于长度为 n 的排列,前 n-1 位的排列总数为 (n-1)!更新 k 的值为当前范围内的余数,递归处理剩余的排列问题。从剩余数字中取出对应的数字,并从候选数字列表中移除。每次递归选出的数字依次拼接,最终形成完整的排列。根据剩余的 k 值,递归处理剩下的数字。原创 2025-01-19 15:14:02 · 969 阅读 · 0 评论 -
【华为OD-E卷 - 87 求最多可以派出多少支团队 100分(python、java、c++、js、c)】
对于需要配对的成员,按照能力值从小到大排序,使用双指针方法,从两端开始配对,如果配对成功(两人能力值之和大于等于 required_cap),则计入团队,更新指针。如果某人的能力值大于等于所需的能力值 required_cap,则该人可以单独组成一个团队。如果某两人的能力值之和大于等于 required_cap,他们可以组成一个团队。如果两人的能力值之和大于或等于 threshold,他们可以组成一个团队。如果两人的能力值之和大于等于 minReq,他们可以组成一个团队。原创 2025-01-23 09:00:00 · 621 阅读 · 0 评论 -
【华为OD-E卷 - 88 工号不够用了怎么办 100分(python、java、c++、js、c)】
【代码】【华为OD-E卷 - 工号不够用了怎么办 100分(python、java、c++、js、c)】原创 2025-01-23 09:00:00 · 619 阅读 · 0 评论 -
【华为OD-E卷 -75 数组连续和 100分(python、java、c++、js、c)】
如果 sum 大于等于 limit,说明从 start 到 end 的子数组满足条件,而对于当前 end,从 start 到数组末尾的子数组也都满足条件,可以直接计算这些子数组的数量:num - end。一旦找到一个子数组的和 total 大于等于 x,就可以确定从 j 开始到数组末尾的所有子数组都满足条件。如果当前窗口和 total 大于等于 x,说明从 right 到数组末尾的所有子数组都满足条件。当窗口和大于等于 x 时,收缩窗口,移除左边界元素,减小窗口和。原创 2025-01-17 19:54:06 · 1009 阅读 · 0 评论