Two sum II 二值和2

Easy, Array/String

给定升序排列的整数列,寻找两数加起来等于目标值。你的函数应当返回两数的位置(1-based)。假设只有一个解且不要两次使用同一个数。

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

Solution:

此题依然可以使用二值和1的解法利用字典来解,复杂度可以控制在O(n)。

不过这里数列加了一个限制条件:升序排列。所以我们可以进一步提高算法效率,使用两个指针同时指向序列头和尾,然后向中间移动,移动过程检查指针指向的数是否加起来为目标值。主需要消耗O(1) space。

class Solution(object):
    def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        l, r = 0, len(numbers)-1
        while l < r:
            s = numbers[l] + numbers[r]
            if s == target:
                return [l+1, r+1]
            elif s < target:
                l += 1
            else:
                r -= 1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 2,082评论 0 2
  • 作者:July、wuliming、pkuoliver 说明:本文分为三部分内容,第一部分为一道百度面试题Top K...
    cyj_ya阅读 915评论 0 0
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,836评论 1 19
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,616评论 3 44
  • 【肤浅认识】 心灵的磨练需要砂纸,人生中所经历的各种艰辛、悲痛、烦恼、挣扎、的喜悦、欢乐和幸福就是砂纸,而“六个精...
    幸福路上_daed阅读 200评论 0 0

友情链接更多精彩内容