LeetCode 题解工作台
将元素分配给有约束条件的组
给你一个整数数组 groups ,其中 groups[i] 表示第 i 组的大小。另给你一个整数数组 elements 。 请你根据以下规则为每个组分配 一个 元素: 如果 groups[i] 能被 elements[j] 整除,则下标为 j 的元素可以分配给组 i 。 如果有多个元素满足条件,则分…
2
题型
5
代码语言
3
相关题
当前训练重点
中等 · 数组·哈希·扫描
答案摘要
我们先找到数组 中的最大值,记为 。用一个数组 记录每个元素对应的下标,初始时 $\textit{d}[x] = -1$ 表示元素 还没有被分配。 然后我们遍历数组 ,对于每个元素 ,如果 $x > \textit{mx}$ 或者 $\textit{d}[x] \neq -1$,说明元素 无法被分配或者已经被分配,直接跳过。否则,我们从 开始,每次加上 ,将 设为 ,表示元素 被分配…
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数组·哈希·扫描 题型思路
题目描述
给你一个整数数组 groups,其中 groups[i] 表示第 i 组的大小。另给你一个整数数组 elements。
请你根据以下规则为每个组分配 一个 元素:
- 如果
groups[i]能被elements[j]整除,则下标为j的元素可以分配给组i。 - 如果有多个元素满足条件,则分配 最小的下标
j的元素。 - 如果没有元素满足条件,则分配 -1 。
返回一个整数数组 assigned,其中 assigned[i] 是分配给组 i 的元素的索引,若无合适的元素,则为 -1。
注意:一个元素可以分配给多个组。
示例 1:
输入: groups = [8,4,3,2,4], elements = [4,2]
输出: [0,0,-1,1,0]
解释:
elements[0] = 4被分配给组 0、1 和 4。elements[1] = 2被分配给组 3。- 无法为组 2 分配任何元素,分配 -1 。
示例 2:
输入: groups = [2,3,5,7], elements = [5,3,3]
输出: [-1,1,0,-1]
解释:
elements[1] = 3被分配给组 1。elements[0] = 5被分配给组 2。- 无法为组 0 和组 3 分配任何元素,分配 -1 。
示例 3:
输入: groups = [10,21,30,41], elements = [2,1]
输出: [0,1,0,1]
解释:
elements[0] = 2 被分配给所有偶数值的组,而 elements[1] = 1 被分配给所有奇数值的组。
提示:
1 <= groups.length <= 1051 <= elements.length <= 1051 <= groups[i] <= 1051 <= elements[i] <= 105
解题思路
方法一:枚举
我们先找到数组 中的最大值,记为 。用一个数组 记录每个元素对应的下标,初始时 表示元素 还没有被分配。
然后我们遍历数组 ,对于每个元素 ,如果 或者 ,说明元素 无法被分配或者已经被分配,直接跳过。否则,我们从 开始,每次加上 ,将 设为 ,表示元素 被分配给了下标 。
最后我们遍历数组 ,根据 数组的记录,得到答案。
时间复杂度 ,空间复杂度 。其中 和 分别是数组 和 的长度;而 是数组 中的最大值。
class Solution:
def assignElements(self, groups: List[int], elements: List[int]) -> List[int]:
mx = max(groups)
d = [-1] * (mx + 1)
for j, x in enumerate(elements):
if x > mx or d[x] != -1:
continue
for y in range(x, mx + 1, x):
if d[y] == -1:
d[y] = j
return [d[x] for x in groups]
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Test if the candidate can optimize array scanning with hashing.
- question_mark
Look for understanding of sieve-like techniques applied to grouping problems.
- question_mark
Assess if the candidate avoids redundant work by using appropriate data structures.
常见陷阱
外企场景- error
Failing to use efficient data structures like hash tables leads to inefficient solutions.
- error
Overlooking cases where no suitable element is available, leading to incorrect -1 assignments.
- error
Not handling the edge cases where groups or elements are exhausted early.
进阶变体
外企场景- arrow_right_alt
Change the problem to require exact group size matching instead of any available element.
- arrow_right_alt
Introduce additional constraints on elements, like limited reuse or an order of assignment.
- arrow_right_alt
Allow multiple elements per group, adding complexity to the assignment logic.