当前位置:   article > 正文

python 算法 两数之和 的多种解法_两数之和python

两数之和python

两数之和问题是LeetCode上的一道经典算法题,也是面试中常见的问题。题目要求在一个整数数组中找到两个数,使它们的和等于一个特定的目标值,并返回这两个数的下标。

以下是多种解法:

  1. 暴力法: 最简单的方法是使用两个嵌套循环遍历数组中的所有可能组合,找到满足目标和的两个数。这种方法的时间复杂度为O(n^2)。
  1. def twoSum(nums, target):
  2. n = len(nums)
  3. for i in range(n):
  4. for j in range(i+1, n):
  5. if nums[i] + nums[j] == target:
  6. return [i, j]
  7. return None
  1. 排序 + 双指针法: 先对数组进行排序,然后使用双指针从数组的两端开始向中间靠拢,根据和与目标值的大小关系来调整指针的位置。这种方法的时间复杂度为O(nlogn),其中n是数组的长度。
  1. def twoSum(nums, target):
  2. sorted_nums = sorted(nums)
  3. left, right = 0, len(nums)-1
  4. while left < right:
  5. curr_sum = sorted_nums[left] + sorted_nums[right]
  6. if curr_sum == target:
  7. break
  8. elif curr_sum < target:
  9. left += 1
  10. else:
  11. right -= 1
  12. if left < right:
  13. # 在原数组中查找对应的下标
  14. index1 = nums.index(sorted_nums[left])
  15. index2 = nums.index(sorted_nums[right], index1+1)
  16. return [index1, index2]
  17. return None
  1. 使用集合(哈希表): 这种方法类似于使用字典的解法,但是不需要存储每个数字对应的下标,只需要存储数字本身。遍历数组时,判断目标值与当前数字的差值是否在集合中,如果在,则找到了满足条件的两个数。
  1. def twoSum(nums, target):
  2. num_set = set()
  3. for num in nums:
  4. complement = target - num
  5. if complement in num_set:
  6. index1 = nums.index(complement)
  7. index2 = nums.index(num, index1+1)
  8. return [index1, index2]
  9. num_set.add(num)
  10. return None
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/644684
推荐阅读
相关标签
  

闽ICP备14008679号