Python实现"两数之和 || - 输入有序数组"的两种方法

给定一个已经按升序排好的整数有序数组,找到该数组中累加等于目标值的两个整数

函数twoSum返回两个整数在数组中的索引,且第一个索引Index1应该小于第二个索引Index2

注意:

返回的结果(包括index1和index2)都是从1开始的

你可以认为每一个输入只对应唯一一个正确答案,同一个元素不能使用两次

Example:

Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.

1:解法与"两数之和"相同,借用dic{}字典完成,时间复杂度O(n)

def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        numDic = {}
        for i in range(len(numbers)):
            if not numDic.has_key(numbers[i]):
                numDic[target-numbers[i]]=i
            else:
                return [numDic.get(numbers[i])+1, i+1]

2:由于整数数组是升序排列,且必有满足目标值的解,所以可以从数组头尾数值的和来逼近(参考他人代码

def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        left = 0
        right = len(numbers)-1
        while left<right:
            sum = numbers[left]+numbers[right]
            if sum==target:
                return [left+1, right+1]
            elif sum>target:
                right -= 1
            else:
                left += 1

算法题来自:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/description/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值