题目链接:
力扣https://leetcode.cn/problems/check-if-n-and-its-double-exist/
【方法一 二分查找】需要注意0的情况,所以二分查找要查找到下标,然后进行二次判断
class Solution {
public int binarySearch(int[] arr, int target){
int left = 0, right = arr.length - 1, mid;
while(left <= right){
mid = (left + right) >>> 1;
if(arr[mid] == target) return mid;
else if(arr[mid] > target) right = mid - 1;
else left = mid + 1;
}
return left == arr.length? right: left;
}
public boolean checkIfExist(int[] arr) {
Arrays.sort(arr);
int idx, n = arr.length;
for(var i = 0; i < n; i++){
idx = binarySearch(arr, arr[i] * 2);
if(idx != i && arr[idx] == arr[i] * 2) return true;
}
return false;
}
}
【方法二 哈希表】用HashMap来记录出现次数。
class Solution {
public boolean checkIfExist(int[] arr) {
HashMap<Integer, Integer> map = new HashMap();
for(var i: arr){
map.put(i, map.getOrDefault(i, 0) + 1);
}
for(var i: arr){
if(i == 0){
if(map.getOrDefault(0, 0) > 1) return true;
}else{
if(map.getOrDefault(i * 2, 0) > 0) return true;
}
}
return false;
}
}
|