Java
import java.util.*;
/**
* <a href="https://leetcode-cn.com/problems/two-sum/">Two Sum</a>
*/
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
return new int[]{i, map.get(target - nums[i])};
}
map.put(nums[i], i);
}
return new int[]{0, 0};
}
}
C++
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int, bool> flag;
unordered_map<int, int> idx;
for (int i = 0; i < nums.size(); ++i) {
flag[nums[i]] = true;
idx[nums[i]] = i;
}
for (int i = 0; i < nums.size(); ++i) {
if (flag[target - nums[i]] && idx[target - nums[i]] != i) {
res.push_back(i);
res.push_back(idx[target - nums[i]]);
break;
}
}
return res;
}
};
Go
func twoSum(nums []int, target int) []int {
// 使用map
m := make(map[int]int)
for i, num := range nums {
if j, ok := m[target-num]; ok {
return []int{j, i}
}
m[num] = i
}
return nil
}
JavaScript
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
let map = new Map();
for (let i = 0; i < nums.length; i++) {
if (map.has(target - nums[i])) {
return [map.get(target - nums[i]), i];
}
map.set(nums[i], i);
}
return [0, 0];
};
PHP
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]
*/
function twoSum(array $nums, int $target): array {
$map = array();
for ($i = 0; $i < count($nums); $i++) {
if (isset($map[$target - $nums[$i]])) {
return [$i, $map[$target - $nums[$i]]];
}
$map[$nums[$i]] = $i;
}
return [0, 0];
}
}
Python
class Solution(object):
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 遍历列表
for i in range(len(nums)):
# 计算需要找到的下一个目标数字
res = target-nums[i]
# 遍历剩下的元素,查找是否存在该数字
if res in nums[i+1:]:
# 若存在,返回答案。这里由于是两数之和,可采用.index()方法
# 获得目标元素在nums[i+1:]这个子数组中的索引后,还需加上i+1才是该元素在nums中的索引
return [i, nums[i+1:].index(res)+i+1]