<span style="line-height: 30px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);">LeetCode 1.Two Sum</span>
<span style="line-height: 30px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);">Given an array of integers, return </span><span style="line-height: 30px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 700; background-color: rgb(255, 255, 255);">indices</span><span style="line-height: 30px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);"> of the two numbers such that they add up to a specific target.</span>
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].
题意:求数组中两个值的和等于目标值
解法1. 用map
<span style="font-size:14px;">class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int > mp;
for(int i = 0; i < nums.size(); i++){
if(mp.count(nums[i]) == 0){
mp[target-nums[i]] = i;
}
else{
return {mp[nums[i]], i};
}
}
return {0,0};
}
};</span>
Runtime: 24 ms
解法2. 用数组
<span style="font-size:14px;">class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int max= nums[0];
int min = max;
for(int i = 0; i < nums.size(); i++){
if(max < nums[i]) max = nums[i];
if(min > nums[i]) min = nums[i];
}
int f[max-min+1];
fill(f,f+max-min+1,-1);
int offset = -min;
for(int i = 0; i < nums.size(); i++){
if(f[nums[i] + offset] == -1){
if(target-nums[i] <= max && target-nums[i] >= min){
f[target-nums[i]+ offset] = i;
}
}
else{
return {f[nums[i] + offset], i};
}
}
return {0,0};
}
};</span>
Runtime: 8ms