leetoj two sum

原创 2015年07月09日 21:52:40

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

这道题目的意思是给出目标值,求数组中那两个数加起来等于目标值,求索引
1.暴力求解:用双重循环来求

for(int i=0;i<numbers.size();i++)
{
    for(int j=i+1;j<numbers.size();j++)
    {
        if(numbers[i]+numbers[j]==target)
        {
            index1=i;
            index2=j;
        }
    }
}

算法的时间复杂度为O(n^2),超时

2.先对数组进行排序,然后每次遍历一个数字,使用二分查找(O(log n))来寻找数组中是否存在target-numbers[i]这个数值,有的话就可以得出结果

//下面的代码是不完善的代码
Arrays.sort(numbers);
for(int i=0;i<numbers.size();i++)
{
    int temp=target-numbers[i];
    int k=bianry_search(temp);
    index1=temp;
    index2=k;
    .......
}

当然假如在c语言中的话需要写出快排的函数,时间复杂度为O(NlogN)

3.第三种思想主要是参考第二种思想,但是不使用二分查找

首先我要对数组进行排序,然后我使用两个指针,一个指针指向第一个元素,另一个指针j指向最后一个元素j

那么
1.numbers[i]+numbers[j]

boolean hasSum(int[] A, int target)
{
    boolean res=false;
    if(A==null || A.length<2) return res;
    Arrays.sort(A);
    int i=0,j=A.length-1;
    while(i<j)
    {
        if(A[i]+A[j]==target)
        {
            res=true;
            break;
        }
        else if(A[i]+A[j]>target)
        {
            j--;
        }
        else i++;
    }
    return res;
} 

时间复杂度还是O(NlogN)
4.通过使用哈希表来降低查询差值的时间复杂度,这里要记住的是 哈希表的查找是常数时间,所以程序的时间复杂度还是O(N),空间复杂度为哈希表的大小

class Solution 
{
public:
    vector<int> twoSum(vector<int> &numbers, int target) 
    {
         vector<int> result;//
         map<int,int> mp;
         map<int,int>::iterator it;
         int index1,index2;
         for(int i=0;i<numbers.size();i++)
         {
            mp[numbers[i]]=i+1;
            //cout<<numbers[i]<<endl;
         }
         for(int i=0;i<numbers.size();i++)
         {
            it=mp.find(target-numbers[i]);
            if(it!=mp.end())
            {
                index1=i+1;
                index2=it->second;
                if(index1==index2) continue;
                break;
            }
         }
         int temp;
         if(index1>index2)
         {
            temp=index1;
            index1=index2;
            index2=temp;

         }
         result.push_back(index1);
         result.push_back(index2);
         return result;
    }
};

第一道leetoj上面的题目,也是第一道使用纯c++样式来做的oj题目,继续努力。

版权声明:可以随意转载

LeetCode::Two Sum C语言

题目 Given an array of integers, find two numbers such that they add up to a specific target number. ...
  • u013300875
  • u013300875
  • 2015年03月07日 15:39
  • 5528

leetcode 刷题题解(c++) 1.Two Sum (hash表,排序+二分查找)

c++刷leetcode,有题目和算法代码,可直接在leetcode提交通过。
  • GOGO_YAO
  • GOGO_YAO
  • 2016年07月24日 20:59
  • 654

算法系列--Two Sum

继续算法系列。今天再看一道leetcode(www.leetcode.com)的题目。问题描述原文 Given an array of integers, find two numbers suc...
  • ylyg050518
  • ylyg050518
  • 2015年09月13日 23:34
  • 935

Two Sum -- LeetCode

原题链接: http://oj.leetcode.com/problems/two-sum/ 这是一道非常经典的题目,brute force时间复杂度为O(n^2), 对每一对pair两两比较。 优...
  • linhuanmars
  • linhuanmars
  • 2014年02月22日 23:11
  • 20497

LeetCode 1 Two Sum 题解

Problem: Given an array of integers, find two numbers such that they add up to a specific target nu...
  • runningtortoises
  • runningtortoises
  • 2015年05月05日 16:53
  • 1255

[LeetCode]1 Two Sum(C++,Python实现)

LeetCode OJ的第一题,题目描述如下:
  • Shiroh_ms08
  • Shiroh_ms08
  • 2014年05月16日 21:17
  • 1869

LeetCode || Two Sum

Two Sum  Total Accepted: 16363 Total Submissions: 87273My Submissions Given an array of ...
  • jiadebin890724
  • jiadebin890724
  • 2014年04月09日 23:11
  • 33867

leetcode 170: Two Sum III - Data structure design

Two Sum III - Data structure design Total Accepted: 311 Total Submissions: 1345 Design and implem...
  • xudli
  • xudli
  • 2014年12月31日 08:17
  • 6988

leetcode 1. Two Sum -----java

题目链接:https://leetcode.com/problems/two-sum/ 题目: Given an array of integers, return indices of th...
  • j754379117
  • j754379117
  • 2016年06月20日 19:52
  • 1406

371. Sum of Two Integers [easy] (Python)

题目链接https://leetcode.com/problems/sum-of-two-integers/题目原文 Calculate the sum of two integers a and...
  • coder_orz
  • coder_orz
  • 2016年07月26日 12:08
  • 3422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetoj two sum
举报原因:
原因补充:

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