一、题目链接
https://leetcode.cn/problems/check-if-n-and-its-double-exist/
二、解题思路
三、实施步骤
四、Java程序
class Solution {
/**
* 判断给定数组中是否存在两个不同位置的元素具有两倍数关系
*
* @param arr int类型的数组,代表给定数组
* @return true当且仅当arr中存在两个不同位置的元素具有两倍数关系,否则false
*/
public boolean checkIfExist(int[] arr) {
int[] count = new int[2001]; // 标记arr每个元素出现的次数,初始时均为0
/* 从左到右,遍历arr的每个元素e */
for (int e : arr) {
count[1000 + e]++; // 当前元素e出现的次数加1
}
if (count[1000] > 1) { // 如果arr中至少有两个不同位置的元素0
return true; // 说明arr满足要求,返回true
}
/* 从左到右,遍历arr的每个元素e,此时arr中至多有一个元素0 */
for (int e : arr) {
// 如果当前元素e不是0且在[-500,500]范围内,且它的两倍数2e出现至少一次
if (e != 0 && -500 <= e && e <= 500 && count[2 * e + 1000] > 0) {
return true; // 说明arr满足要求,返回true
}
}
return false; // 以上操作没有返回true,说明arr不满足要求,返回false
}
}