题目内容

题目来源:LeetCode

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

题目思路

题目难度:easy

虽然这个题目不属于难题,但是它是k-sum系列问题的核心。因此详细地在此总结。

做本题有三种方法:

第一种是最容易想到的暴力搜索,用两个循环嵌套,不采用此方法。

第二种是哈希法。

第三种是双指针法。

哈希法

本质的思路是:对于每一个nums[i],寻找剩下的数组中是否存在target-nums[i]。若存在,直接返回其下标就好。否则继续寻找,直到全部查找完毕,返回空。在Python中,可以直接使用dict这个数据结构来存储元素和下标的对应关系。每次判断完后,将这个数加入到dict中。

哈希法的Python代码

class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
d={}
for i in range(len(nums)):
if target-nums[i] in d:
return (d[target-nums[i]],i)
d[nums[i]]=i

双指针法

双指针法的思路是,先将数组nums进行排序,然后分别设立两个指针,一个指向第一个元素,另一个指向最后一个元素。每次判断指针指向的这两个数的和,若它们的和大于target,那么将左边的指针加一,如果小于target,那么将右边的指针减一。如果等于target,就输出。其实这是一种从两边夹逼的思想。这个题目要求返回的是下标而不是值,因此多了很多操作,如果仅仅是要求返回值,那么就会简洁多了。

双指针Python代码

class Solution:
# @return a tuple, (index1, index2)
def twoSum(self, num, target):
index = []
numtosort = num[:]; numtosort.sort()
i = 0; j = len(numtosort) - 1
while i < j:
if numtosort[i] + numtosort[j] == target:
for k in range(0,len(num)):
if num[k] == numtosort[i]:
index.append(k)
break
for k in range(len(num)-1,-1,-1):
if num[k] == numtosort[j]:
index.append(k)
break
index.sort()
break
elif numtosort[i] + numtosort[j] < target:
i = i + 1
elif numtosort[i] + numtosort[j] > target:
j = j - 1 return (index[0]+1,index[1]+1)

(双指针的代码自己没编,来源于: http://www.cnblogs.com/zuoyuan/p/3698966.html)

[算法题] Two Sum的更多相关文章

  1. LeetCode算法题-Two Sum IV - Input is a BST(Java实现)

    这是悦乐书的第280次更新,第296篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第148题(顺位题号是653).给定二进制搜索树和目标数,如果BST中存在两个元素,使得 ...

  2. LeetCode算法题-Path Sum III(Java实现)

    这是悦乐书的第227次更新 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第94题(顺位题号是437).您将获得一个二叉树,其中每个节点都包含一个整数值.找到与给定值相加的路径数 ...

  3. LeetCode算法题-Range Sum Query Immutable(Java实现)

    这是悦乐书的第204次更新,第214篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第70题(顺位题号是303).给定整数数组nums,找到索引i和j(i≤j)之间的元素之 ...

  4. LeetCode算法题-Two Sum II - Input array is sorted

    这是悦乐书的第179次更新,第181篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第38题(顺位题号是167).给定已按升序排序的整数数组,找到两个数字,使它们相加到特定 ...

  5. LeetCode算法题-Path Sum(Java实现)

    这是悦乐书的第169次更新,第171篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第28题(顺位题号是112).给定二叉树和整数sum,确定树是否具有根到叶路径,使得沿路 ...

  6. 【算法】LeetCode算法题-Two Sum

    程序 = 数据结构 + 算法. 算法是每一位程序员学习成长之路上无法避开的重要一环,并且越早接触越好.今后会每天做些算法题,至少每天做一道题目,同时会记录自己的解题思路和代码,通过[算法]专题来分享. ...

  7. Kotlin实现LeetCode算法题之Two Sum

    LeetCode介绍 LeetCode是算法练习.交流等多功能网站,感兴趣的同学可以关注下(老司机请超车).页面顶部的Problems菜单对应算法题库,附带历史通过滤.难易程度等信息. 未来计划 打算 ...

  8. LeetCode算法题-Sum of Left Leaves(Java实现)

    这是悦乐书的第217次更新,第230篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第85题(顺位题号是404).找到给定二叉树中所有左叶的总和.例如: 二叉树中有两个左叶 ...

  9. LeetCode算法题-Sum of Two Integers(Java实现)

    这是悦乐书的第210次更新,第222篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第78题(顺位题号是371).计算两个整数a和b的总和,但不允许使用运算符+和 - .例 ...

随机推荐

  1. 12.exception对象

    excepton对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生了这个对象,如果一个jsp页面要应用此对象,就必须把isErrorPage设置为true,否则无法编译.它实际上是java. ...

  2. javaWeb第一天

    //第一个JavaWeb项目package com.chy.action; import java.io.IOException; import javax.servlet.ServletExcept ...

  3. 今天get到的两个angular知识点

    angular 控制器$scope依赖注入的正确写法 <div ng-controller="ctrl"> {{name}} {{age}} <div ng-co ...

  4. java循环、数组练习

    System.out.println("请输入学生个数"); int a=sc.nextInt();//定义一个变量说明学生的数量 int max=0; int[] scores= ...

  5. Java 9 揭秘(15. 增强的弃用注解)

    Tips 做一个终身学习的人. 主要介绍以下内容: 如何弃用API @deprecate Javadoc标签和@Deprecation注解在弃用的API中的角色 用于生成弃用警告的详细规则 在JDK ...

  6. (转)硬盘分区备忘(主分区,扩展分区和逻辑分区)以及Linux硬盘分区工具parted 介绍

    场景:最近在学习Linux的基础知识,不可避免的设计到Linux的磁盘分区,以前做过总结,但是那种总结就是复制别人的文章,总结完就不想看第二遍,所以很容易就遗忘了!清楚明白的理解分区后,我就可以在自己 ...

  7. (转)java for循环的执行顺序和几种常用写法

    算是温习吧.问题比较基础,但是也比较重要.(虽然是C,但是很经典) for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式. 但是这三个部分的执行顺序是什么,这是我们 ...

  8. (转)Spring Bean Scope 有状态的Bean 无状态的Bean

    有状态会话bean   :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一 ...

  9. unrecognized font family "iconfont2"

    起因:使用React Native开发App,需要使用自定义字体iconfont2.ttf,要在xCode中引入该字体 步骤:将字体文件拷贝到项目工程中,在Info.plist文件中添加Fonts p ...

  10. 【CSS】background 的覆盖

    1. 样式覆盖问题描述 现象:class1 为dom节点默认样式,class2为dom节点后增加样式,发现class2的background 被class1的覆盖 解决办法:在class2 的back ...