1346. Check If N and Its Double Exist
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 != j0 <= i, j < arr.lengtharr[i] == 2 * arr[j]
Example 1:
Input: arr = [10,2,5,3] Output: true Explanation: N= 10is the double of M= 5,that is,10 = 2 * 5.
Example 2:
Input: arr = [7,1,14,11] Output: true Explanation: N= 14is 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更好

浙公网安备 33010602011771号