1.两数之和(Two Sum)
给定一个整数数列,找出其中和为特定值的那两个数。
你可以假设每个输入都只会有一种答案,同样的元素不能被重用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
思路1:暴力法 时间复杂度O(n^2)
当前元素与其后元素之和与target比较,相等则输出这两个元素的索引,否则当前元素继续与下一个元素求和再与target比较。
vector<int> twoSum(vector<int>& nums, int target) { vector<int> ans; for(int i=0;i<nums.size();++i){ for(int j=i+1;j<nums.size();++j){ if(nums[i]+nums[j]==target){ ans.push_back(i); ans.push_back(j); break; } } if(!ans.empty()){ break; } } return ans; }
思路2:建立map数据
vector<int> two Sum(vector<int>& nums,int target){ int size=nums.size(); if(size==0){ throw "Invalid input"; } unorder_map<int,int> rec; vector<int> res; for(int i=0;i<size;i++){ int compensate=target-nums[i]; if(rec.find(compensate)!=rec.end()){ res.push_back(rec[compensate]); res.push_back(rec(i)); return res; } rec[nums[i]]=i; } }