题目描述: 给你一个整数数组 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 。 提示:
- 2 <= arr.length <= 500
- -103 <= arr[i] <= 103
解法
哈希表即可。
代码
class Solution:
def checkIfExist(self, arr: List[int]) -> bool:
num_dict = Counter(arr)
for num in arr:
if num == 0:
if num_dict[0] > 1:
return True
elif num % 2 == 0 and num // 2 in num_dict:
return True
return False
测试结果
执行用时:32 ms, 在所有 Python3 提交中击败了 83.61% 的用户 内存消耗:14.9 MB, 在所有 Python3 提交中击败了 85.28% 的用户
说明
算法题来源:力扣(LeetCode)
|