给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值target的那两个整数,并返回它们的数组下标。 假设每种输入只会对应一个答案,每个元素可以多次使用。 可以按任意顺序返回答案。
时间: 2024-10-05 11:00:22 浏览: 27
这是一个经典的编程问题,通常被称为“两数之和”(Two Sum),可以用哈希表(Hash Table)或者字典(Dictionary)数据结构来解决。基本思路是遍历数组,对于每一个元素,我们查找其目标值减去它的值是否已经在哈希表中,如果找到了就找到一对和为目标值的数,然后返回这两个元素的下标。
Python的解决方案可能会像这样:
```python
def twoSum(nums, target):
# 创建一个空的字典用于存储元素及其索引
hash_map = {}
for i, num in enumerate(nums):
# 如果目标值减去当前元素已经存在于字典中
if target - num in hash_map:
# 返回这对相加等于目标值的元素的索引
return [hash_map[target - num], i]
# 否则,将当前元素及其索引添加到字典中
hash_map[num] = i
# 没有找到符合条件的元素对,返回空列表
return []
```
相关问题
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
解题思路:使用哈希表,遍历数组,将每个元素的值作为键,下标作为值存入哈希表中。在遍历过程中,判断哈希表中是否存在 target - nums[i] 的键,如果存在,则说明找到了两个数的和为 target,返回它们的下标即可。
代码实现:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hash;
for (int i = ; i < nums.size(); i++) {
int complement = target - nums[i];
if (hash.count(complement)) {
return {hash[complement], i};
}
hash[nums[i]] = i;
}
return {};
}
};
c#给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设
数组中只有两个元素的和等于目标值。
可以使用哈希表(Dictionary)来实现。遍历数组 nums,对于每个元素 nums[i],使用 target - nums[i] 得到另一个数,如果另一个数在哈希表中出现过,则返回两个数的下标。如果没出现过,则将当前元素加入哈希表中,继续遍历。
C#代码实现如下:
```
public int[] TwoSum(int[] nums, int target) {
Dictionary<int, int> dict = new Dictionary<int, int>();
for (int i = 0; i < nums.Length; i++) {
int complement = target - nums[i];
if (dict.ContainsKey(complement)) {
return new int[] { dict[complement], i };
}
dict[nums[i]] = i;
}
return new int[0];
}
```
该算法的时间复杂度为 O(n),空间复杂度为 O(n)。
阅读全文