LC 528. 按权重随机选择 题目描述这是 LeetCode 上的 528. 按权重随机选择 ,难度为 中等。 给定一个正整数数组 $w$ ,其中 $w[i]$ 代表下标 $i$ 的权重(下标从 $0$ 开始),请写一个函数 pickIndex ,它可以随机地获取下标 $i$,选取下标 $i$ 的概率与 $w[i]$ 成正比。 例如,对于 $w = [1, 3]$,挑选下标 $0$ 的概率为 $1 / (1 + 3) = 0. 2021-08-30 模拟 二分 前缀和
LC 1588. 所有奇数长度子数组的和 题目描述这是 LeetCode 上的 1588. 所有奇数长度子数组的和 ,难度为 简单。 给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。 子数组定义为原数组中的一个连续子序列。 请你返回 arr 中所有奇数长度子数组的和。 示例 1:123456789101112131415输入:arr = [1,4,2,5,3]输出:58解释:所有奇数长度子数组和它们的和为:[1] = 2021-08-29 数学 前缀和
LC 1480. 一维数组的动态和 题目描述这是 LeetCode 上的 1480. 一维数组的动态和 ,难度为 简单。 给你一个数组 nums。 数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i])。 请返回 nums 的动态和。 示例 1:12345输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4 2021-08-28 模拟 前缀和
LC 295. 数据流的中位数 题目描述这是 LeetCode 上的 295. 数据流的中位数 ,难度为 困难。 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 $3$ [2,3] 的中位数是 $(2 + 3) / 2 = 2.5$ 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 do 2021-08-27 优先队列(堆)
LC 881. 救生艇 题目描述这是 LeetCode 上的 881. 救生艇 ,难度为 中等。 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 示例 1:12345输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2 2021-08-26 贪心 双指针
LC 797. 所有可能的路径 题目描述这是 LeetCode 上的 797. 所有可能的路径 ,难度为 中等。 给你一个有 n 个节点的有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。 译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a。 示例 1: 12345输 2021-08-25 DFS 回溯算法
LC 787. K 站中转内最便宜的航班 题目描述这是 LeetCode 上的 787. K 站中转内最便宜的航班 ,难度为 中等。 有 n 个城市通过一些航班连接。给你一个数组 flights,其中 $flights[i] = [from_i, to_i, price_i]$ ,表示该航班都从城市 $from_i$ 开始,以价格 $price_i$ 抵达 $to_i$。 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst, 2021-08-24 最短路 Bellman Ford
LC 1646. 获取生成数组中的最大值 题目描述这是 LeetCode 上的 1646. 获取生成数组中的最大值 ,难度为 中等。 给你一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums : nums[0] = 0 nums[1] = 1 当 2 <= 2 i <= n 时,nums[2 i] = nums[i] 当 2 <= 2 i + 1 <= n 时,nums[2 i + 1] 2021-08-23 模拟 打表
LC 789. 逃脱阻碍者 题目描述这是 LeetCode 上的 789. 逃脱阻碍者 ,难度为 中等。 你在进行一个简化版的吃豆人游戏。 你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget]。 地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] = [xi, yi] 出发。 所有输入均为整数坐标。 每一回合,你和阻碍者们可以同时向东,西,南 2021-08-22 数学
LC 443. 压缩字符串 题目描述这是 LeetCode 上的 443. 压缩字符串 ,难度为 中等。 给你一个字符数组 chars,请使用下述算法压缩: 从一个空字符串 s 开始,对于 chars 中的每组连续重复字符 : 如果这一组长度为 1,则将字符追加到 s 中 否则,需要向 s 追加字符,后跟这一组的长度 压缩后得到的字符串 s 不应该直接返回,需要转储到字符数组 chars 中。 需要注意的是,如果组长度为 2021-08-21 模拟 双指针 字符串
LC 541. 反转字符串 II 题目描述这是 LeetCode 上的 541. 反转字符串 II ,难度为 简单。 给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样 示例 1:123输入:s = "abcdefg", k = 2输出 2021-08-20 模拟
LC 1622. 奇妙序列 题目描述这是 LeetCode 上的 1629. 按键持续时间最长的键 ,难度为 困难。 请你实现三个 API append,addAll 和 multAll 来实现奇妙序列。 请实现 Fancy 类 : Fancy() 初始化一个空序列对象。 void append(val) 将整数 val 添加在序列末尾。 void addAll(inc) 将所有序列中的现有数值都增加 inc 。 void 2021-08-20 线段树
LC 297. 二叉树的序列化与反序列化 题目描述这是 LeetCode 上的 297. 二叉树的序列化与反序列化 ,难度为 困难。 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个 2021-08-20 二叉树 层序遍历
LC 517. 超级洗衣机 题目描述这是 LeetCode 上的 517. 超级洗衣机 ,难度为 困难。 假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。 在每一步操作中,你可以选择任意 m (1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。 给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出能让所 2021-08-20 贪心
LC 75. 颜色分类 题目描述这是 LeetCode 上的 75. 颜色分类 ,难度为 中等。 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库的 sort 函数的情况下解决这个问题。 示例 1:123输入:nums = [2,0,2,1,1,0]输出:[ 2021-08-20 双指针 排序