剑指offer 57. 和为s的两个数
题目:找出数组中和为s的两个数
方法一:哈希表 时间复杂度O(n) 空间复杂度O(n) 这个有序无序都能用
def twoSum(nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ dic = {} for num in nums: dic[target - num] = num for num in nums: if num in dic: return num,dic[num] return None
方法二:碰撞双指针 时间复杂度O(n) 空间复杂度O(1)
在数组的头尾各放置一个指针,判断两数之和,大于目标值就右指针左移,小于目标值就左指针右移,等于就返回
def twoSum(nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ l,r = 0,len(nums) - 1 s = 0 while l < r: s = nums[l] + nums[r] if s < target: l += 1 elif s > target: r -= 1 else: return nums[l],nums[r] return []
方法三:二分查找 时间复杂度O(nlogn) 空间复杂度O(1)

浙公网安备 33010602011771号