📜  在 python 中找到两个数字(1)

📅  最后修改于: 2023-12-03 14:51:06.043000             🧑  作者: Mango

在 Python 中找到两个数字

在编程中我们常常需要找到列表、数组或字符串中的数字并进行处理。这里我们介绍一些在 Python 中找到两个数字的方法。

1. 暴力枚举

暴力枚举是最简单的方法,通过嵌套循环遍历列表或数组中的每一个元素,然后比较它们的值是否符合要求。例如,找到两个数的和为给定值的下标。

def find_sum(arr, target):
    n = len(arr)
    for i in range(n):
        for j in range(i+1, n):
            if arr[i] + arr[j] == target:
                return i, j
    return -1, -1

时间复杂度为 $O(n^2)$,不建议在数据量较大时使用。

2. 排序+双指针

排序+双指针法是对暴力枚举的优化,通过先将数组进行排序,再使用双指针同时从两端向中间遍历,可以快速找到满足条件的元素。

例如,找到两个数的和为给定值的下标。

def find_sum(arr, target):
    arr.sort()
    n = len(arr)
    left, right = 0, n-1
    while left < right:
        if arr[left] + arr[right] == target:
            return left, right
        elif arr[left] + arr[right] < target:
            left += 1
        else:
            right -= 1
    return -1, -1

时间复杂度为 $O(nlogn)$,适用于数据量较大的情况。

3. 哈希表

哈希表也是一种常用的数据结构,在 Python 中可以使用字典来实现。哈希表可以快速查找元素,如果找到了满足条件的元素,即可直接返回下标。

例如,找到两个数的和为给定值的下标。

def find_sum(arr, target):
    hash_table = {}
    for i, num in enumerate(arr):
        if target - num in hash_table:
            return hash_table[target-num], i
        hash_table[num] = i
    return -1, -1

时间复杂度为 $O(n)$,建议使用此方法解决大部分问题。