1. Two Sum查找列表中两数加和等于特定值Python

给定一个整数数组,返回两个数字的位置,以便它们加起来成为一个特定值。

假设每个输入都只有一个解决方案,并且不会两次使用同一元素。
Input: [2, 7, 11, 15],target:9
Output:[0, 1]

因为肯定会有两个数相加等于target, 并且是有序list, 所以遍历list里面的数时按顺序就可以

Method 1 两层循环遍历list

每次对第i个数字进行操作, 判断其后面的数与它相加是否等于target

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i]+nums[j]==target:
                    return [i,j]
'''
nums=[1,2,3,4] target=7
i=1>>j=2,3,4 加和不等于7
i=2>>j=3,4 ...
i=3>>j=4 加和等于7
'''

时间复杂度为1(n-1)+2(n-2)+...(n-1)1的累加

Method 2 单层循环字典定位

建立一个字典temp, i表示在nums中的位置, j表示数值, 如果target-j的值不存在字典里,那么就把temp[j]=i存入字典, 如果存在就返回i和target-j在字典中对应的value也就是i值

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        temp={}
        for i,j in enumerate(nums):
            if target-j not in temp:
                temp[j]=i
            else:
                return [i, temp[target-j]]

时间复杂度O(n)

method2速度比method1快

你可能感兴趣的:(Leetcode(Easy),python,leetcode)