Approach 1: Two-pointer

class Solution:
    def findMaxK(self, nums: List[int]) -> int:
        nums.sort()
        l, r = 0, len(nums) - 1
 
        while l < r and nums[l] < 0:
            if -nums[l] == nums[r]:
                return nums[r]
            
            if -nums[l] > nums[r]:
                l += 1
            else:
                r -= 1
        
        return -1
 

Complexity

Time:
Space:

Approach 2: One-pass hash

class Solution:
    def findMaxK(self, nums: List[int]) -> int:
        seen = set()
 
        ans = -1
        for num in nums:
            if -num in seen and abs(num) > ans:
                ans = abs(num)
            
            seen.add(num)
 
        return ans

Complexity

Time:
Space:

Approach 3: BitSet

import kotlin.math.abs
 
class Solution {
    fun findMaxK(nums: IntArray): Int {
        var seen = BitSet(2048)
 
        var ans = -1
        for (num in nums) {
            if (seen.get(-num + 1024) && abs(num) > ans) {
                ans = abs(num)
            }
 
            seen.set(num + 1024, true)
        }
 
        return ans
    }
}

Time:
Space: — Since fixed size bitset is used.

Other Languages