1. 两数之和
题目描述
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
c#
public class Solution
{
public int[] TwoSum(int[] nums, int target)
{
var m = new Dictionary<int, int>();
for (int i = 0, j;i<nums.Length ; ++i)
{
int x = nums[i];
int y = target - x;
if (m.TryGetValue(y, out j))
{
return new[] { j, i };
}
if (!m.ContainsKey(x))
{
m.Add(x, i);
}
}
return new int[]{};
}
}
public class Run
{
public static void Main()
{
int[] nums = { 2, 11, 15, 21, 29 };
int target = 36;
Solution solution = new Solution();
int[] ret = solution.TwoSum(nums, target);
if (ret.Length ==2)
Console.WriteLine("Result:{0},{1}", ret[0], ret[1]);
else
Console.WriteLine("Not Found Result.");
}
}
c++
public:
vector<int> TwoSum(vector<int>& nums, int target) {
unordered_map<int, int> m;
for (int i = 0;; ++i) {
int x = nums[i];
int y = target - x;
if (m.count(y)) {
return { m[y], i };
}
m[x] = i;
}
}
};
int main()
{
vector<int> nums = {2, 11, 15, 21, 29};
int target = 36;
Solution solution;
vector<int> ret = solution.TwoSum(nums, target);
if (ret.size() == 2)
printf("Result:%d,%d", ret[0], ret[1]);
else
printf("Not Found Result.");
}
Python
from typing import List
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
m = {} # 创建一个空的哈希表,用于存储元素及其对应的索引
for i, x in enumerate(nums): # 遍历列表,同时获取元素索引和值
y = target - x # 计算目标值减去当前元素的差值
if y in m: # 如果差值存在于哈希表中,说明之前已经遍历过一个元素与当前元素的和为目标值
return [m[y], i] # 返回之前元素的索引和当前元素的索引
m[x] = i # 将当前元素及其索引添加到哈希表中
# 示例用法
solution = Solution()
result = solution.twoSum([2, 7, 11, 15], 9)
print(result) # 输出 [0, 1]
Java
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int[] twoSum(int[] nums,int target) {
Map<Integer,Integer> m = new HashMap<>();
for(int i=0;;i++)
{
int x=nums[i];
int y=target-x;
if (m.containsKey(y))
{
return new int[]{m.get(y),i};
}
m.put(x,i);
}
}
public static void main(String[] args) {
int[] nums = { 2, 7, 11, 15 };
int target = 18;
Solution solution=new Solution();
int[] result = solution.twoSum(nums, target);
System.out.println("Result: " + Arrays.toString(result));
}
}