与对应负数同时存在的最大正整数-LeetCode
2441. 与对应负数同时存在的最大正整数
🎯 问题描述(来源于LeetCode)
描述:
给你一个不包含任何零的整数数组 nums,找出自身与对应的负数都在数组中存在的最大正整数 k。
返回正整数 k,如果不存在这样的整数,返回 -1。
说明:
-
这是一个哈希表查找问题。
-
核心逻辑是遍历数组,对于每个数字,检查其相反数是否已经出现过。
-
如果出现过,则更新最大值。
-
示例:
-
示例 1:
1 | 输入:nums = [-1,2,-3,3] |
- 示例 2:
1 | 输入:nums = [-1,10,6,7,-7,1] |
💻 解题思路
思路1:哈希表(一次遍历)
思路1:代码实现
1 | class Solution: |
思路1:📊 性能分析
- 时间复杂度:
- 其中 是数组
nums的长度。 - 我们只遍历数组一次,每次在哈希表中查找和插入操作的平均时间复杂度都是 。
- 总时间复杂度为 。
- 其中 是数组
- 空间复杂度:
- 哈希表
find在最坏情况下需要存储 个键值对。
- 哈希表
思考
-
哈希表的作用:
- 哈希表用于存储已经遍历过的数字。
- 通过哈希表,我们可以快速查找是否存在一个数字,使得它与当前数字互为相反数。
-
查找逻辑:
- 对于当前数字
num,我们检查-num是否已经在哈希表中。 - 如果
-num在哈希表中,说明我们找到了一个满足条件的数对。 - 此时,
abs(num)就是一个候选答案,我们用它来更新最大值。
- 对于当前数字
-
为什么不需要区分正负:
- 代码中使用了
abs(num),这样无论当前数字是正还是负,都能正确计算其绝对值。 - 例如,如果当前数字是 -3,且 3 已经在哈希表中,那么
abs(-3) = 3就是一个候选答案。 - 如果当前数字是 3,且 -3 已经在哈希表中,那么
abs(3) = 3也是一个候选答案。
- 代码中使用了
-
存储逻辑:
- 在查找之后,我们将当前数字
num存入哈希表。 - 这样可以确保在后续遍历中,当前数字可以被其他数字找到。
- 在查找之后,我们将当前数字
-
边界情况:
- 数组中没有满足条件的数对:
ans保持为 -1,返回 -1。 - 数组中有多个满足条件的数对:
ans会不断更新为最大值。
- 数组中没有满足条件的数对:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!






