[每日一题] 01.03 - 两数之和

两数之和

[每日一题] 01.03 - 两数之和_第1张图片

1(最优)

先生成一个字典,索引为键
然后对字典按值排序
之后对nums排序
利用双指针法对nums遍历
得到最终left,right后,对应到sorted_d中寻找对应的索引

def twoSum(nums: list[int], target: int) -> list[int]:
    d = {i: x for i, x in enumerate(nums)}
    sorted_d = sorted(d.items(), key=lambda item: item[1])
    nums.sort()
    left = 0
    right = len(nums) - 1
    while left < right:
        Sum = nums[left] + nums[right]
        if Sum > target:
            right -= 1
        elif Sum < target:
            left += 1
        else:
            return [sorted_d[left][0],sorted_d[right][0]]

效果还行
[每日一题] 01.03 - 两数之和_第2张图片

2

暴力解法
不过时间复杂度过高

def twoSum(nums, target):
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return [i, j]

3

题解里翻到的,放到这做个思路

def twoSum(nums, target):
    for i in range(len(nums)):
        res = target-nums[i]
        if res in nums[i+1:]:
            return [i, nums[i+1:].index(res)+i+1]

小结

sort 可以直接改变所排序的变量,而 sorted 不会
sort 是 list 的内建函数,不能用于字典的排序,而 sorted 可以用于列表、元组、字典的排序

sorted 函数原型如下,返回的是一个列表
sorted(iterable, *, key=None, reverse=False)
iterable:排序的主体
key:对主体中哪部分进行排序

你可能感兴趣的:(算法,python,python,算法)