Description
Given an array arr of integers, check if there exist two indices i and j such that :
i != j0 <= i, j < arr.lengtharr[i] == 2 * arr[j]
Example 1:
Input: arr = [10,2,5,3] Output: true Explanation: For i = 0 and j = 2, arr[i] == 10 == 2 * 5 == 2 * arr[j]
Example 2:
Input: arr = [3,1,7,11] Output: false Explanation: There is no i and j that satisfy the conditions.
Constraints:
2 <= arr.length <= 500-103 <= arr[i] <= 103
Solutions
Solution 1: Hash Table
We define a hash table s to record the elements that have been visited.
Traverse the array arr. For each element x, if either double of x or half of x is in the hash table s, then return true. Otherwise, add x to the hash table s.
If no element satisfying the condition is found after the traversal, return false.
The time complexity is O(n), and the space complexity is O(n). Where n is the length of the array arr.
PythonJavaC++GoTypeScript
class Solution: def checkIfExist(self, arr: List[int]) -> bool: s = set() for x in arr: if x * 2 in s or (x % 2 == 0 and x // 2 in s): return True s.add(x) return False(code-box)
