1. 程式人生 > >LeetCode-001:Two Sum

LeetCode-001:Two Sum

題目:

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].

 題意:

給出一個數組和一個目標數,在陣列中找出兩個元素的和為目標數,求這兩個元素的下標。ps:只有一對元素且下標從小到大輸出。

思路:

第一反應是hash表查詢,利用STL中的map容器標記陣列中的元素,另其為陣列元素下標+1(因為map容器初始值為0,陣列元素下標從0開始)。然後就是遍歷整個陣列元素,查詢與當前元素和為目標數的另一個元素是否存在。若存在,則將兩個元素的下標放入vector中~當然還有別的方法,比如先排序後二分查詢等,比較懶就不寫了~

Code:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int>q;
        int i,key,len=nums.size();
        q[nums[0]]=1;
        for(i=1;i<len;i++){
            key=target-nums[i];
            if(q[key]!=0){
                vector<int> result;
                result.push_back(q[key]-1);
                result.push_back(i);
                return result;
            }
            q[nums[i]]=i+1;
        }
    }
};