Given an array arr
of integers, check if there exists two integers N
and M
such that N
is the double of M
( i.e. N = 2 * M
).
More formally check if there exists two indices i
and j
such that :
i != j
0 <= i, j < arr.length
arr[i] == 2 * arr[j]
Example 1:
Input: arr = [10,2,5,3] Output: true Explanation: N= 10
is the double of M= 5
,that is,10 = 2 * 5
.
Example 2:
Input: arr = [7,1,14,11] Output: true Explanation: N= 14
is the double of M= 7
,that is,14 = 2 * 7
.
Example 3:
Input: arr = [3,1,7,11] Output: false Explanation: In this case does not exist N and M, such that N = 2 * M.
Constraints:
2 <= arr.length <= 500
-10^3 <= arr[i] <= 10^3
class Solution { public boolean checkIfExist(int[] arr) { Map<Integer, Integer> map = new HashMap(); int zero = 0; for(int i = 0; i < arr.length; i++){ map.putIfAbsent(arr[i], i); if(arr[i] == 0) zero++; } for(int i: arr){ if(zero == 2) return true; else{ map.remove(0); if(map.containsKey(2*i)) return true; } } return false; } }
0很特殊,如果用hashmap的话要注意判断0的数量,如果是两个就是true,一个的话要先remove了0再做判断。
class Solution { public boolean checkIfExist(int[] arr) { HashSet<Integer> set = new HashSet<>(); for(int a : arr) { if(set.contains(a*2) || (a%2 == 0 && set.contains(a/2))) return true; set.add(a); } return false; } }
相比而言hashset更好