LeetCode 题解工作台
选择不同 X 值三元组使 Y 值之和最大
给你两个整数数组 x 和 y ,长度均为 n 。你必须选择三个 不同 的下标 i , j 和 k ,满足以下条件: x[i] != x[j] x[j] != x[k] x[k] != x[i] 你的目标是在满足这些条件下 最大化 y[i] + y[j] + y[k] 的值。返回通过选择这样一组三元组…
5
题型
6
代码语言
3
相关题
当前训练重点
中等 · 数组·哈希·扫描
答案摘要
我们将数组 和 中的元素配对成一个二维数组 ,然后按照 的值从大到小对 进行排序。接下来,我们使用一个哈希表来记录已经选择的 值,并遍历 ,每次选择一个未被选择的 值和对应的 值,直到选择了三个不同的 值为止。 如果在遍历过程中选择了三个不同的 值,则返回这三个 值的和;如果遍历结束后仍未选择三个不同的 值,则返回 -1。
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数组·哈希·扫描 题型思路
题目描述
给你两个整数数组 x 和 y,长度均为 n。你必须选择三个 不同 的下标 i ,j 和 k,满足以下条件:
x[i] != x[j]x[j] != x[k]x[k] != x[i]
你的目标是在满足这些条件下 最大化 y[i] + y[j] + y[k] 的值。返回通过选择这样一组三元组下标所能获得的 最大 可能和。
如果不存在这样的三元组,返回 -1。
示例 1:
输入:x = [1,2,1,3,2], y = [5,3,4,6,2]
输出:14
解释:
- 选择
i = 0(x[i] = 1,y[i] = 5),j = 1(x[j] = 2,y[j] = 3),k = 3(x[k] = 3,y[k] = 6)。 - 选出的三个
x中的值互不相同。5 + 3 + 6 = 14是我们能获得的最大值。因此输出为 14。
示例 2:
输入:x = [1,2,1,2], y = [4,5,6,7]
输出:-1
解释:
x中只有两个不同的值。因此输出为 -1。
提示:
n == x.length == y.length3 <= n <= 1051 <= x[i], y[i] <= 106
解题思路
方法一:排序 + 贪心 + 哈希表
我们将数组 和 中的元素配对成一个二维数组 ,然后按照 的值从大到小对 进行排序。接下来,我们使用一个哈希表来记录已经选择的 值,并遍历 ,每次选择一个未被选择的 值和对应的 值,直到选择了三个不同的 值为止。
如果在遍历过程中选择了三个不同的 值,则返回这三个 值的和;如果遍历结束后仍未选择三个不同的 值,则返回 -1。
时间复杂度 ,空间复杂度 。其中 为数组 和 的长度。
class Solution:
def maxSumDistinctTriplet(self, x: List[int], y: List[int]) -> int:
arr = [(a, b) for a, b in zip(x, y)]
arr.sort(key=lambda x: -x[1])
vis = set()
ans = 0
for a, b in arr:
if a in vis:
continue
vis.add(a)
ans += b
if len(vis) == 3:
return ans
return -1
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity is O(n) for building the hash map and O(k log k) for sorting k unique x-values, where k <= n. Space complexity is O(k) for storing maximum y-values for each unique x in the hash map. |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Ask for maximum sum with distinct x-values
- question_mark
Check if candidate ignores duplicate x-values when selecting y
- question_mark
Look for O(n) hash map preprocessing plus sorting for top three selection
常见陷阱
外企场景- error
Including multiple y-values for the same x, leading to invalid triplets
- error
Not handling fewer than three unique x-values, returning incorrect sum
- error
Sorting all y-values instead of only the maximums, increasing unnecessary computation
进阶变体
外企场景- arrow_right_alt
Maximize sum with four distinct x-values instead of three
- arrow_right_alt
Select triplet under a threshold constraint on y-values
- arrow_right_alt
Minimize sum by picking distinct x-values instead of maximizing