题解 | #两数之和#

两数之和

http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

暴力法

从逐个遍历,不解释。

但python直接暴力***超时,在循环中做个小判断,如果比目标大10,就跳过,少一层循环。

class Solution:
    def twoSum(self , numbers: List[int], target: int) -> List[int]:
        isok = 0
        length = len(numbers)
        for i in range(length):
            if numbers[i] - 10 >= target:
                continue
            for j in range(i+1, length):
                if numbers[i] + numbers[j] == target :
                    isok = 1
                    break
            if isok :
                break
        return [i+1,j+1]

伪·hashMap法

借用java中hashMap法的思想,将列表转换到一个set中(去重),再一个个试(if target-num in set)是否有符合条件的数字。

class Solution:
    def twoSum(self , numbers: List[int], target: int) -> List[int]:
        num_map = set(numbers)
        for i in num_map:
            if target-i in num_map:
                break
        a = numbers.index(i)
        if i == target-i :
            b = numbers.index(target-i,a+1)
            return [a+1,b+1]
        else :
            b = numbers.index(target-i)
        su = [a+1,b+1]
        su.sort()
        return su
全部评论

相关推荐

04-06 16:59
已编辑
河南工业大学 Java
牛牛牛的牛子:最好扔了,实在没有选择的选择
点赞 评论 收藏
分享
刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
26届双非不知道咋找得到实习了
kong_kong:1.广投,boss每天200次机会用完, 2.简历上技能和项目经历突出你在这个岗位上的突出优势。 3.还是广投,不要挑地点,公司规模(我当时是线下一个都不去,如果你离得近可以考虑一下去现场) 4.简历写的自己成绩好什么的,奖项也写一写(懂的都懂)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务