LeetCode #1346. Check If N and Its Double Exist
题目
1346. Check If N and Its Double Exist
解题方法
构造一个字典,遍历数组,如果当前数不是0,则加入到字典中并把值设置为下标值;如果是0则看看字典中有没有0,如果没有就把0加进去,值设置为1,如果有就把值增加1。然后根据条件判断是否要返回True,判断条件是1:arr[i]的两倍在dic中,且下标不相等;或者2:arr[i]可以被2整除,且它整除2得到的数在字典中,且下标不相等;或者3:0在字典中,且出现次数大于1。
时间复杂度:O(n)
空间复杂度:O(n)
代码
class Solution:
def checkIfExist(self, arr: List[int]) -> bool:
dic = {}
for i in range(len(arr)):
if arr[i]:
dic[arr[i]] = i
else:
if arr[i] not in dic:
dic[arr[i]] = 1
else:
dic[arr[i]] += 1
if arr[i] * 2 in dic and i != dic[arr[i] * 2] or \
not arr[i] % 2 and arr[i] // 2 in dic and i != dic[arr[i] // 2] or \
0 in dic and dic[0] > 1:
return True
return False

浙公网安备 33010602011771号