directory
0.0.0-20240920062246-d0657495930a
Repository: https://github.com/yigmmk/leetcode.git
Documentation: pkg.go.dev
# Packages
* @lc app=leetcode.cn id=215 lang=golang
*
* [215] 数组中的第K个最大元素
*
* https://leetcode.cn/problems/kth-largest-element-in-an-array/description/
*
* algorithms
* Medium (62.43%)
* Likes: 2361
* Dislikes: 0
* Total Accepted: 960.1K
* Total Submissions: 1.5M
* Testcase Example: '[3,2,1,5,6,4]\n2'
*
* 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
*
* 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
*
* 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
*
*
*
* 示例 1:
*
*
* 输入: [3,2,1,5,6,4], k = 2
* 输出: 5
*
*
* 示例 2:
*
*
* 输入: [3,2,3,1,2,4,5,5,6], k = 4
* 输出: 4
*
*
*
* 提示:
*
*
* 1 <= k <= nums.length <= 10^5
* -10^4 <= nums[i] <= 10^4
*
*
*/.
* @lc app=leetcode.cn id=2336 lang=golang
*
* [2336] 无限集中的最小数字
*
* https://leetcode.cn/problems/smallest-number-in-infinite-set/description/
*
- algorithms
- Medium (72.79%)
- Likes: 70
- Dislikes: 0
- Total Accepted: 31.8K
- Total Submissions: 43.7K
- Testcase Example: '["SmallestInfiniteSet","addBack","popSmallest","popSmallest","popSmallest","addBack","popSmallest","popSmallest","popSmallest"]\n' +
'[[],[2],[],[],[],[1],[],[],[]]'
*
* 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。
*
* 实现 SmallestInfiniteSet 类:
*
*
* SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
* int popSmallest() 移除 并返回该无限集中的最小整数。
* void addBack(int num) 如果正整数 num 不 存在于无限集中,则将一个 num 添加 到该无限集最后。
*
*
*
*
* 示例:
*
*
* 输入
* ["SmallestInfiniteSet", "addBack", "popSmallest", "popSmallest",
* "popSmallest", "addBack", "popSmallest", "popSmallest", "popSmallest"]
* [[], [2], [], [], [], [1], [], [], []]
* 输出
* [null, null, 1, 2, 3, null, 1, 4, 5]
*
* 解释
* SmallestInfiniteSet smallestInfiniteSet = new SmallestInfiniteSet();
* smallestInfiniteSet.addBack(2); // 2 已经在集合中,所以不做任何变更。
* smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 是最小的整数,并将其从集合中移除。
* smallestInfiniteSet.popSmallest(); // 返回 2 ,并将其从集合中移除。
* smallestInfiniteSet.popSmallest(); // 返回 3 ,并将其从集合中移除。
* smallestInfiniteSet.addBack(1); // 将 1 添加到该集合中。
* smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 在上一步中被添加到集合中,
* // 且 1 是最小的整数,并将其从集合中移除。
* smallestInfiniteSet.popSmallest(); // 返回 4 ,并将其从集合中移除。
* smallestInfiniteSet.popSmallest(); // 返回 5 ,并将其从集合中移除。
*
*
*
* 提示:
*
*
* 1 <= num <= 1000
* 最多调用 popSmallest 和 addBack 方法 共计 1000 次
*
*
*/.
* @lc app=leetcode.cn id=2462 lang=golang
*
* [2462] 雇佣 K 位工人的总代价
*
* https://leetcode.cn/problems/total-cost-to-hire-k-workers/description/
*
* algorithms
* Medium (39.03%)
* Likes: 54
* Dislikes: 0
* Total Accepted: 9.7K
* Total Submissions: 24.9K
* Testcase Example: '[17,12,10,2,7,2,11,20,8]\n3\n4'
*
* 给你一个下标从 0 开始的整数数组 costs ,其中 costs[i] 是雇佣第 i 位工人的代价。
*
* 同时给你两个整数 k 和 candidates 。我们想根据以下规则恰好雇佣 k 位工人:
*
*
* 总共进行 k 轮雇佣,且每一轮恰好雇佣一位工人。
* 在每一轮雇佣中,从最前面 candidates 和最后面 candidates
* 人中选出代价最小的一位工人,如果有多位代价相同且最小的工人,选择下标更小的一位工人。
*
* 比方说,costs = [3,2,7,7,1,2] 且 candidates = 2 ,第一轮雇佣中,我们选择第 4 位工人,因为他的代价最小
* [3,2,7,7,1,2] 。
* 第二轮雇佣,我们选择第 1 位工人,因为他们的代价与第 4 位工人一样都是最小代价,而且下标更小,[3,2,7,7,2]
* 。注意每一轮雇佣后,剩余工人的下标可能会发生变化。
*
*
* 如果剩余员工数目不足 candidates 人,那么下一轮雇佣他们中代价最小的一人,如果有多位代价相同且最小的工人,选择下标更小的一位工人。
* 一位工人只能被选择一次。
*
*
* 返回雇佣恰好 k 位工人的总代价。
*
*
*
* 示例 1:
*
* 输入:costs = [17,12,10,2,7,2,11,20,8], k = 3, candidates = 4
* 输出:11
* 解释:我们总共雇佣 3 位工人。总代价一开始为 0 。
* - 第一轮雇佣,我们从 [17,12,10,2,7,2,11,20,8] 中选择。最小代价是 2 ,有两位工人,我们选择下标更小的一位工人,即第 3
* 位工人。总代价是 0 + 2 = 2 。
* - 第二轮雇佣,我们从 [17,12,10,7,2,11,20,8] 中选择。最小代价是 2 ,下标为 4 ,总代价是 2 + 2 = 4 。
* - 第三轮雇佣,我们从 [17,12,10,7,11,20,8] 中选择,最小代价是 7 ,下标为 3 ,总代价是 4 + 7 = 11 。注意下标为
* 3 的工人同时在最前面和最后面 4 位工人中。
* 总雇佣代价是 11 。
*
*
* 示例 2:
*
* 输入:costs = [1,2,4,1], k = 3, candidates = 3
* 输出:4
* 解释:我们总共雇佣 3 位工人。总代价一开始为 0 。
* - 第一轮雇佣,我们从 [1,2,4,1] 中选择。最小代价为 1 ,有两位工人,我们选择下标更小的一位工人,即第 0 位工人,总代价是 0 + 1 =
* 1 。注意,下标为 1 和 2 的工人同时在最前面和最后面 3 位工人中。
* - 第二轮雇佣,我们从 [2,4,1] 中选择。最小代价为 1 ,下标为 2 ,总代价是 1 + 1 = 2 。
* - 第三轮雇佣,少于 3 位工人,我们从剩余工人 [2,4] 中选择。最小代价是 2 ,下标为 0 。总代价为 2 + 2 = 4 。
* 总雇佣代价是 4 。
*
*
*
*
* 提示:
*
*
* 1 <= costs.length <= 10^5
* 1 <= costs[i] <= 10^5
* 1 <= k, candidates <= costs.length
*
*
*/.
* @lc app=leetcode.cn id=2542 lang=golang
*
* [2542] 最大子序列的分数
*
* https://leetcode.cn/problems/maximum-subsequence-score/description/
*
* algorithms
* Medium (51.58%)
* Likes: 73
* Dislikes: 0
* Total Accepted: 6.2K
* Total Submissions: 12K
* Testcase Example: '[1,3,3,2]\n[2,1,3,4]\n3'
*
* 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都是 n ,再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k
* 的 子序列 对应的下标。
*
* 对于选择的下标 i0 ,i1 ,..., ik - 1 ,你的 分数 定义如下:
*
*
* nums1 中下标对应元素求和,乘以 nums2 中下标对应元素的 最小值 。
* 用公式表示: (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] ,
* nums2[i1], ..
No description provided by the author
* @lc app=leetcode.cn id=789 lang=golang
*
* [789] 逃脱阻碍者
*
* https://leetcode.cn/problems/escape-the-ghosts/description/
*
* algorithms
* Medium (68.50%)
* Likes: 115
* Dislikes: 0
* Total Accepted: 23.9K
* Total Submissions: 34.8K
* Testcase Example: '[[1,0],[0,3]]\n[0,1]'
*
* 你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget]
* 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] = [xi, yi] 出发。所有输入均为 整数坐标 。
*
* 每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置 1 个单位 的新位置。当然,也可以选择 不动 。所有动作 同时
* 发生。
*
* 如果你可以在任何阻碍者抓住你 之前 到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者 同时 到达了一个位置(包括目的地)
* 都不算 是逃脱成功。
*
* 如果不管阻碍者怎么移动都可以成功逃脱时,输出 true ;否则,输出 false 。
*
*
* 示例 1:
*
*
* 输入:ghosts = [[1,0],[0,3]], target = [0,1]
* 输出:true
* 解释:你可以直接一步到达目的地 (0,1) ,在 (1, 0) 或者 (0, 3) 位置的阻碍者都不可能抓住你。
*
*
* 示例 2:
*
*
* 输入:ghosts = [[1,0]], target = [2,0]
* 输出:false
* 解释:你需要走到位于 (2, 0) 的目的地,但是在 (1, 0) 的阻碍者位于你和目的地之间。
*
*
* 示例 3:
*
*
* 输入:ghosts = [[2,0]], target = [1,0]
* 输出:false
* 解释:阻碍者可以和你同时达到目的地。
*
*
*
*
* 提示:
*
*
* 1 <= ghosts.length <= 100
* ghosts[i].length == 2
* -10^4 <= xi, yi <= 10^4
* 同一位置可能有 多个阻碍者 。
* target.length == 2
* -10^4 <= xtarget, ytarget <= 10^4
*
*
*/.