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
posted @ 2020-11-25 16:21  老鼠司令  阅读(97)  评论(0)    收藏  举报