LeetCode-001:Two Sum
阿新 • • 發佈:2019-01-13
題目:
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
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; } } };