leetcode(1)_Two Sum

来源:互联网 发布:淘宝一个差评多少钱 编辑:程序博客网 时间:2024/06/05 19:52

题目

1. 我的解答

class Solution(object):    def twoSum(self, nums, target):        maps = {}        for i in range(len(nums)):            maps.update({str(i):nums[i]})        def getIndex(values):            assert len(values) == 2            print(values)            if values[0] == values[1]:                indexes = [i for i ,a in enumerate(maps.values()) if a == values[0]]                return sorted([int(maps.keys()[indexes[0]]), int(maps.keys()[indexes[1]])])            else:                index0  = maps.keys()[maps.values().index(values[0])]                index1  = maps.keys()[maps.values().index(values[1])]                return sorted([int(index0), int(index1)])        sort_nums = sorted(nums)        nums_small = [x for x in sort_nums if x <= target - sort_nums[0]]        nums_middle = [x for x in nums_small if x ==  target/2]        if len(nums_middle) == 2 and nums_middle[0] + nums_middle[1] == target:            return getIndex(nums_middle)        nums_left = [x for x in nums_small if x < target/2]        nums_right = [x for x in nums_small if x > target/2]        print("l:", nums_left)        print("r:", nums_right)        for l in nums_left:            result = [r for r in nums_right if l+r == target]            if len(result) == 1:                result = getIndex([l, target-l])                return result        return None

2. 大神的代码

大神写的

class Solution(object):    def twoSum(self, nums, target):        nums_dict = dict()        for i, v in enumerate(nums):            if v not in nums_dict:                nums_dict[v] = i            if target - v in nums_dict:                k = nums_dict[target - v]                if k < i:                    return [k, i]

我的思路是,先保存索引,再排序,然后对半查找,对于6=3+3的情况,需要单独判断。
大神的思路是,在建立索引的时候,同时判断,而且是利用target-v是否在dict的方式,而不是两次遍历求和判断。

3. 差距

  1. 尽量避免重复多个循环,能同时做的事情,绝不分开做。
  2. 当要进行某种遍历时,要选择遍历变量的所在集合尽可能小的方法遍历。
原创粉丝点击