leetcode 167. Two Sum II - Input array is sorted 两数之和 II - 输入有序数组 python 多种思路 字典可以构建双指针结构

class Solution:
    def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        # First method 遍历方法
        # new_numbers = sorted(set(numbers))
        # for i in range(len(new_numbers)):
        #     for j in range(i,len(new_numbers)):
        #         if new_numbers[i] + new_numbers[j] == target:
        #             index1 = numbers.index(new_numbers[i])+1 
        #             numbers.remove(new_numbers[i])    
        #             return [index1, numbers.index(new_numbers[j])+2]



        # Second method 
        # new_numbers = sorted(set(numbers))
        # for i in range(len(new_numbers)):
        #     number2 = target- new_numbers[i]
        #     if number2 in new_numbers:
        #         if number2 == new_numbers[i]:
        #             return [numbers.index(new_numbers[i])+1, numbers.index(number2)+2]   # 处理number1 == number2 相同的情况,他们总是挨着
        #         return [numbers.index(new_numbers[i])+1, numbers.index(number2)+1]


        # third method
        # new_numbers = sorted(set(numbers))
        # for i in range(len(new_numbers)):
        #     number2 = target- new_numbers[i]
        #     if number2 in new_numbers:
        #         ans = numbers.index(new_numbers[i])+1
        #         numbers.remove(new_numbers[i])
        #         return [ans, numbers.index(number2)+2]


        # fourth method  利用字典,巧妙地去掉了重复元素,并且不用特殊处理两个因子相等的情况。
        check={}
        for i in range(len(numbers)):
            if numbers[i] in check:
                return [check.get(numbers[i])+1,i+1]
            else:
                check[target-numbers[i]]=i


猜你喜欢

转载自blog.csdn.net/huhehaotechangsha/article/details/80854300