Two Sum

这道题有三种解法:

1.暴力求解,用两层for循环,遍历所有可能的情况,时间复杂度是O(n2)

2.先将数组排序,头尾各设置一个指针,左右两边夹逼寻找,但是这道题要返回的是数的索引,所以这种方式不太合适

3.使用hash的方式,将hash的关键字设置为数组元素,关键字对应着数组元素的索引(要注意hash的关键字不能出现重复的情况)

**还要注意返回的数组索引,必须有先后顺序,即由小到大

vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        unordered_map<int,int> number;
        
        for(int i=0;i<nums.size();i++)
        {
            int gap=target-nums[i];
            if(number.find(gap)!=number.end())
            {
                result.push_back(number[gap]);
                result.push_back(i);
                return result;
            }
            if(number.find(nums[i])==number.end())
                number[nums[i]]=i;
        }
        
        return result;
    }

 

posted on 2016-05-04 14:23  summerkiki  阅读(108)  评论(0编辑  收藏  举报