/**
* 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.
*
* Example:
* Given nums = [2, 7, 11, 15], target = 9,
*
* Because nums[0] + nums[1] = 2 + 7 = 9,
* return [0, 1].
*
*/
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> rs(2, 0);
int s = 0;
int e = nums.size() - 1;
for (int i = 0; i < e; )
{
s = (nums[i] + nums[e]);
if (s == target)
{
rs[0] = i;
rs[1] = e;
break;
}
else if (s < target)
i++;
else
e--;
}
return rs;
}
//leetcode 公认比较好的算法
vector<int> twoSum1(vector<int> &nums, int target)
{
vector<int> rs(2, 0);
int tmp;
unordered_map<int, int> hash;
for (int i = 0; i < nums.size(); i++)
{
tmp = target - nums[i];
if (hash.find(tmp) != hash.end())
{
rs[0] = hash[tmp];
rs[1] = i;
}
hash[nums[i]] = i;
}
return rs;
}
int main()
{
vector<int> nums{ 2, 7, 11, 15 };
int target = 17;
vector<int> rs = twoSum1(nums, target);
cout << rs[0] << " " << rs[1] << endl;
system("pause");
return 0;
}
【leetcode】 1. Two Sum
最新推荐文章于 2020-11-21 22:03:15 发布