【leetcode】two-sum

来源:互联网 发布:学生成绩系统c语言 编辑:程序博客网 时间:2024/06/15 16:34

题目: 
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.

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

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

翻译: 
给定一个整形数组和一个整数target,返回2个元素的下标,它们满足相加的和为target。 
你可以假定每个输入,都会恰好有一个满足条件的返回结果。

代码一:暴力解法,时间复杂度为O(n^2)

   vector<int> twoSum(vector<int> &numbers, int target) {        int len=numbers.size();        vector<int> result;        for(int i=0;i<len-1;i++)            {            for(int j=i+1;j<len;j++)                {                if((numbers[i]+numbers[j])==target)                 {                    result.push_back(i+1);                    result.push_back(j+1);                    break;                }            }        }          return result;    }
代码二,建立一个哈希表,依次读取数组中的每个数,对于一个数,如果(target-这个数)后能在哈希表里面找到,那么就能直接输出了,如果没有找到,那么我们把这个数存放在哈希表里面。整体下来,每个数其实在数组中就被查阅了一次,而在哈希表的查阅为O(1),因此总的时间复杂度为O(n)

vector<int> twoSum(vector<int> &numbers, int target) {        int len=numbers.size();        map<int,int> index;        vector<int> result;        for(int i=0;i<len;i++)            {            if(index.find(target-numbers[i])==index.end())//没找到            {                index.insert(pair<int,int>(numbers[i],i));            }            else{//找到                result.push_back(i+1);                result.push_back(index[target-numbers[i]]+1);                break;            }        }        sort(result.begin(),result.end());//因为插入顺序并不确定        return result;    }




原创粉丝点击