LeetCode 题解工作台
找出可整除性得分最大的整数
给你两个整数数组 nums 和 divisors 。 divisors[i] 的 可整除性得分 等于满足 nums[j] 能被 divisors[i] 整除的下标 j 的数量。 返回 可整除性得分 最大的整数 divisors[i] 。如果有多个整数具有最大得分,则返回数值最小的一个。 示例 1: …
1
题型
6
代码语言
3
相关题
当前训练重点
简单 · 数组·driven
答案摘要
我们可以枚举 中的每个元素 ,计算 中有多少个元素能被 整除,记为 。 - 如果 大于当前最大的可整除性得分 ,则更新 $mx = cnt$,并且更新 $ans = div$。
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数组·driven 题型思路
题目描述
给你两个整数数组 nums 和 divisors 。
divisors[i] 的 可整除性得分 等于满足 nums[j] 能被 divisors[i] 整除的下标 j 的数量。
返回 可整除性得分 最大的整数 divisors[i] 。如果有多个整数具有最大得分,则返回数值最小的一个。
示例 1:
输入:nums = [2,9,15,50], divisors = [5,3,7,2]
输出:2
解释:
divisors[0] 的可整除性分数为 2 因为 nums[2] 和 nums[3] 能被 5 整除。
divisors[1] 的可整除性分数为 2 因为 nums[1] 和 nums[2] 能被 3 整除。
divisors[2] 的可整除性分数为 0 因为 nums 中没有数字能被 7 整除。
divisors[3] 的可整除性分数为 2 因为 nums[0] 和 nums[3] 能够被 2 整除。
因为 divisors[0] 、divisor[1] 和 divisors[3] 有相同的可整除性分数,我们返回更小的那个 divisors[3]。
示例 2:
输入:nums = [4,7,9,3,9], divisors = [5,2,3]
输出:3
解释:
divisors[0] 的可整除性分数为 0 因为 nums 中没有数字能被 5 整除。
divisors[1] 的可整除性分数为 1 因为只有 nums[0] 能被 2 整除。
divisors[2] 的可整除性分数为 3 因为 nums[2] ,nums[3] 和 nums[4] 能被 3 整除。
示例 3:
输入:nums = [20,14,21,10], divisors = [10,16,20]
输出:10
解释:
divisors[0] 的可整除性分数为 2 因为 nums[0] 和 nums[3] 能被 10 整除。
divisors[1] 的可整除性分数为 0 因为 nums 中没有数字能被 16 整除。
divisors[2] 的可整除性分数为 1 因为 nums[0] 能被 20 整除。
因为 divisors[0] 的可整除性分数最大,我们返回 divisors[0]。
提示:
1 <= nums.length, divisors.length <= 10001 <= nums[i], divisors[i] <= 109
解题思路
方法一:枚举
我们可以枚举 中的每个元素 ,计算 中有多少个元素能被 整除,记为 。
- 如果 大于当前最大的可整除性得分 ,则更新 ,并且更新 。
- 如果 等于 并且 小于 ,则更新 。
最后返回 即可。
时间复杂度 ,其中 和 分别是 和 的长度。空间复杂度 。
class Solution:
def maxDivScore(self, nums: List[int], divisors: List[int]) -> int:
ans, mx = divisors[0], 0
for div in divisors:
cnt = sum(x % div == 0 for x in nums)
if mx < cnt:
mx, ans = cnt, div
elif mx == cnt and ans > div:
ans = div
return ans
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity is O(n * m) where n is the length of nums and m is the length of divisors since each divisor is compared to every element. Space complexity is O(1) beyond input storage, tracking only maximum score and current best divisor. |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Looking for correct counting of divisible elements for each divisor.
- question_mark
Check if ties are correctly broken by selecting the smallest divisor.
- question_mark
Expect efficient iteration without unnecessary nested structures beyond array traversal.
常见陷阱
外企场景- error
Forgetting to handle multiple divisors with the same maximum score.
- error
Using unnecessary extra space instead of simple counters.
- error
Skipping elements in nums or divisors leading to incorrect counts.
进阶变体
外企场景- arrow_right_alt
Find the maximum divisibility score when arrays contain negative numbers.
- arrow_right_alt
Return all divisors that share the maximum divisibility score instead of just the smallest.
- arrow_right_alt
Compute maximum divisibility scores for multiple nums arrays against the same divisors array.