📅  最后修改于: 2023-12-03 14:51:06.043000             🧑  作者: Mango
在编程中我们常常需要找到列表、数组或字符串中的数字并进行处理。这里我们介绍一些在 Python 中找到两个数字的方法。
暴力枚举是最简单的方法,通过嵌套循环遍历列表或数组中的每一个元素,然后比较它们的值是否符合要求。例如,找到两个数的和为给定值的下标。
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)$,不建议在数据量较大时使用。
排序+双指针法是对暴力枚举的优化,通过先将数组进行排序,再使用双指针同时从两端向中间遍历,可以快速找到满足条件的元素。
例如,找到两个数的和为给定值的下标。
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)$,适用于数据量较大的情况。
哈希表也是一种常用的数据结构,在 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)$,建议使用此方法解决大部分问题。