剑指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) 

 
posted @ 2022-07-25 12:20  Liang-ml  阅读(20)  评论(0)    收藏  举报