给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
更正式地,检查是否存在两个下标 i 和 j 满足:
i != j
0 <= i, j < arr.length
arr[i] == 2 * arr[j]
输入:arr = [10,2,5,3]
输出:true
解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。
输入:arr = [7,1,14,11]
输出:true
解释:N = 14 是 M = 7 的两倍,即 14 = 2 * 7 。
输入:arr = [3,1,7,11]
输出:false
解释:在该情况下不存在 N 和 M 满足 N = 2 * M 。
用数组生成一个Set, 然后遍历Set查找item是否存在item*2的元素, 有就返回true, 没有就返回false.
但是但是, 测试用例里有0的情况, 需要特别判断下, 如果0的数量只有一个, 那就是继续set判断; 如果0的数量超过了2个, 那就可以直接返回true了
class Solution {
func checkIfExist(_ arr: [Int]) -> Bool {
let firstZero = arr.firstIndex(of: 0)
let lastZero = arr.lastIndex(of: 0)
if (firstZero != nil && lastZero != nil) {
if firstZero != lastZero {
return true
}
}
let set = Set.init(arr)
for item in set {
if item == 0 {
continue
}
if set.contains(item*2) {
return true
}
}
return false
}
}