LeetCode第一题Two Sum

原创 2015年11月19日 22:28:16

       好了,今天给大家介绍的是LeetCode上面的第一道题,原题链接为https://leetcode.com/problems/two-sum/,别小看这一题哦,他后来会演化出threesum,foursum等问题,接下来就为大家介绍解法。

题目如下:     

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

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

翻译过来就是给出一个数组,找出这个数组中的两个元素,使得两者的和为一个特定值(假设题目只有一个解)

看到这道题,相信大部分童鞋的第一个想法就是遍历两遍数组,用穷举法找出这两个下标:

 

for(int i=0;i<nums.length;i++){

   for(int j=0;j<nums.length;j++){

         if(nums[i]+nums[j]==target){

             break;

         }

    }

}

   显然这个方法不是我们心中想要的解法,它的复杂度是o(n^2),而且没有用到我们学习到的数据结构,使用的只有简单的数组。

   这个时候题干上所说:返回两个下标提示了我们解题的思路。既然让我们返回的是数组的下标(如果返回的是数组的值,那么以后我们在threesum中会有讨论),那么我们可以想到,可不可以建立一个hashtable,使得数组的值为hashtable的键,数组的下标为hashtable的值呢?这样的话,我们只需要线性遍历一遍数组,获取数组中元素的值nums[i],然后用target-nums[i]到hashtable中获取到另外一个数的下标j即可。

   代码如下:

     

int m=0;
    int n=0;
    Hashtable<Integer, Integer> test = new Hashtable<Integer, Integer>();//建立储存数组值和下标对应的得hashtable
    for(int i=0;i<nums.length;i++){
    test.put(nums[i], i+1);  //将数组值和下标对应的得hashtable
    }
    for(int i=0;i<nums.length;i++){
    if(test.containsKey(target-nums[i])){  //从nums[i]寻找到nums[j],使得两者和为target,然后根据nums[j]从hashtable中找到对应的j
      n=(int) test.get(target-nums[i]);
      m=i+1;
      if(m!=n){
         break;
      }
    }
    }
    int a[]={Math.min(m, n),m+n-Math.min(m, n)};//按从小到大返回下标
        return a;


相关文章推荐

leetcode第一题two sum

太久不做算法。自己真是太渣。最开始用了一个最傻逼的O(N^2),

two Sum leetCode第一题

题目描述: Given an array of integers, find two numbers such that they add up to a specific target number...
  • zwlhoho
  • zwlhoho
  • 2015年06月16日 17:26
  • 405

Two Sum leetcode第一题

Two SumGiven an array of integers, find two numbers such that they add up to a specific target numbe...
  • wynhuhu
  • wynhuhu
  • 2015年04月27日 12:04
  • 187

Leetcode第一题_Two Sum

leetcode算法题第一题Two Sum,题目如下Two Sum Total Accepted: 86454 Total Submissions: 490141 My Submissions Que...
  • bigevil
  • bigevil
  • 2015年05月04日 11:25
  • 392

LeetCode 1.Two Sum ------------LeetCode 第一题

1. Two Sum

[leetcode]leetcode第一题 1. Two Sum java O(n)解法

利用hash,因为给的数据源中可能出现多个相同的数,所以重写equals和hashcode方法,此外利用cloneable加速 public class Solution { public ...

Two Sum leetcode c++

  • 2015年10月01日 10:47
  • 763B
  • 下载

第一题: Two Sum

擦!,leecode: Two Sum

Leetcode 第 1 题(Two Sum)

Leetcode 第一题昨天去逛了逛这个网站,感觉挺有意思。准备有空的时候就做一两道。第一道题目是这样的: Given an array of integers, return indices o...

leetcode编程题(1)Two Sum

导言 题目原题目 题目中文翻译 解析 代码 测试的代码 运行结果导言leetcode是一个判断型的OJ,拥有大量的算法题目,最近拿来练手题目(原题目)Given an array of integer...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode第一题Two Sum
举报原因:
原因补充:

(最多只允许输入30个字)