给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。

返回正整数 k ,如果不存在这样的整数,返回 -1 。

示例 1:

输入:nums = [-1,2,-3,3]
输出:3
解释:3 是数组中唯一一个满足题目要求的 k 。

示例 2:

输入:nums = [-1,10,6,7,-7,1]
输出:7
解释:数组中存在 17 对应的负数,7 的值更大。

示例 3:

输入:nums = [-10,8,6,7,-2,-3]
输出:-1
解释:不存在满足题目要求的 k ,返回 -1

提示:

  • 1 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • nums[i] != 0

解法 哈希集合+一次遍历

用一个哈希表记录出现过的数字。一边遍历,一边看 − nums [ i ] -\textit{nums}[i] nums[i] 是否在哈希表中,如果在,就更新答案的最大值 。

class Solution {
    public int findMaxK(int[] nums) {
        var rec = new HashSet<Integer>();
        int ans = -1;
        for (int i : nums) {
            if (rec.contains(-i)) ans = Math.max(ans, Math.abs(i));
            rec.add(i);
        }
        return ans;
    }
}

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)
05-13 23:32