代码
class Solution:
def getSumIndex(self, nums: List[int], target: int) -> List[int]:
records = dict()
for index, value in enumerate(nums):
if target - value in records: # 遍历当前元素,并在map中寻找是否有匹配的key
return [records[target- value], index]
records[value] = index # 遍历当前元素,并在map中寻找是否有匹配的key
return []
概念
本算法是解力扣的题目,原文链接https://leetcode.cn/problems/two-sum/。要求如下
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
代码功能
使用key,value 结构存储遍历数据,key存储数组元素,value存储元素下标。
代码解释
records
是一个字典,用于将nums
的元素作为键,它们的索引作为值进行存储。- 该方法使用
for
循环遍历nums
的枚举元素(索引和值)。 - 对于每个元素,它检查
target
和当前值之差是否已经存在于records
字典中。如果存在,这意味着找到了一对索引,它们对应的元素之和等于目标值。在这种情况下,返回索引[records[target - value], index]
。 - 如果在迭代过程中没有找到匹配的对,它将当前值及其索引添加到
records
字典中。 - 如果循环完成而没有找到一对索引,就返回一个空列表
[]
,表示没有找到这样的对。
其他实现方式
java
public int[] getSumIndex(int[] nums, int target) {
int[] res = new int[2];
if(nums == null || nums.length == 0){
return res;
}
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
int temp = target - nums[i]; // 遍历当前元素,并在map中寻找是否有匹配的key
if(map.containsKey(temp)){
res[1] = i;
res[0] = map.get(temp);
break;
}
map.put(nums[i], i); // 如果没找到匹配对,就把访问过的元素和下标加入到map中
}
return res;
}
javascript
var function getSumIndex(nums, target) {
let hash = {};
for (let i = 0; i < nums.length; i++) { // 遍历当前元素,并在map中寻找是否有匹配的key
if (hash[target - nums[i]] !== undefined) {
return [i, hash[target - nums[i]]];
}
hash[nums[i]] = i; // 如果没找到匹配对,就把访问过的元素和下标加入到map中
}
return [];
};
C#
public class Solution {
public int[] getSumIndex(int[] nums, int target) {
Dictionary<int ,int> dic= new Dictionary<int,int>();
for(int i=0;i<nums.Length;i++){
int imp= target-nums[i];
if(dic.ContainsKey(imp)&&dic[imp]!=i){
return new int[]{i, dic[imp]};
}
if(!dic.ContainsKey(nums[i])){
dic.Add(nums[i],i);
}
}
return new int[]{0, 0};
}
}