LeetCode Problems 001
Problems 001 -Two Sum[两数之和]
1. 题目
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].
2. 解决方法
2.1 C++解法
(1)C++ 解法一
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
int i,j;
for(int i = 0; i < nums.size(); i++)
{
for(int j = i+1; j < nums.size(); j++)
{
if(nums[i] + nums[j] == target)
{
result.push_back(i);
result.push_back(j);
}
}
}
return result;
}
};
(2) C++ 解法二
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
map<int,int> mapping;
for(int i = 0; i < nums.size(); i++)
{
mapping[nums[i]] = i;
}
for(int i = 0; i < nums.size(); i++)
{
int searched = target - nums[i];
if(mapping.count(searched) && i!=mapping[searched])
{
result.push_back(i);
result.push_back(mapping[searched]);
break;
}
}
return result;
}
};
(3) C++ 解法三
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> hash;
vector<int> result;
for(int i = 0; i < nums.size(); i++)
{
int searched = target - nums[i];
if(hash.find(searched)!=hash.end())
{
result.push_back(hash[searched]);
result.push_back(i);
return result;
}
hash[nums[i]] = i;
}
return result;
}
};
(4) C++ 解法四
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int, int> mapping;
for(int i = 0; i < nums.size(); ++i)
{
if(mapping.count(target-nums[i]))
{
return {i, mapping[target - nums[i]]};
}
mapping[nums[i]] = i;
}
return {};
}
};
2.2 Java 解法
(1)Java 解法一
class Solution {
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] == target - nums[i]) {
return new int[] { i, j };
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
(2)Java 解法二
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> Hmap = new HashMap<Integer, Integer>();
int[] result = new int[2];
for (int i = 0; i < nums.length; ++i) {
Hmap.put(nums[i], i);
}
for (int i = 0; i < nums.length; ++i) {
int t = target - nums[i];
if (Hmap.containsKey(t) && Hmap.get(t) != i) {
result[0] = i;
result[1] = Hmap.get(t);
break;
}
}
return result;
}
}
(3)Java 解法 三
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
}