给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复
时间: 2023-10-20 16:08:26 浏览: 87
你好,给定一个整数数组 nums 和一个整数目标值 target,要找到和为目标值 target 的两个整数并返回它们的数组下标,可以使用哈希表来解决这个问题。我们可以遍历数组,对于每一个元素,计算出需要的另一个数值,如果这个数值已经在哈希表中了,说明找到了两个数的和为目标值,直接返回它们的数组下标即可。如果没有找到,将当前元素的值和下标存入哈希表中,继续遍历后面的元素。以下是代码实现的例子:
```python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
index_map = {}
for i in range(len(nums)):
complement = target - nums[i]
if complement in index_map:
return [index_map[complement], i]
index_map[nums[i]] = i
```
其中 index_map 是一个哈希表,用来存储数组中已经出现的元素的值和它们所在的下标。在遍历数组时,首先计算出需要的另一个数值 complement,如果 complement 出现在哈希表中,说明找到了两个数的和为目标值,直接返回它们的数组下标。如果 complement 没有出现在哈希表中,将当前元素的值和下标存入哈希表中,继续遍历后面的元素。
相关问题
给定一个整数数组 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)。
阅读全文