给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解题思路
创建一个HashTable,将nums的元素作为key,将元素索引作为value。其次遍历nums元素,再在HashTable中寻找target-x,如果找到了就返回由这两个索引组成的数组,如果没找到就继续找。
const twoSum = function(nums, target) {
const hashTable = new Map()
for(let i = 0;i<nums.length;i++){
let index = hashTable.get(target-nums[i])
if(index!==undefined){
return [index,i]
}
hashTable.set(nums[i],i)
}
return []
};
Go
复习语法:HashMap的初始化;数组的初始化;for range 的用法,第一个参数是index,第二个参数是元素;在hashTable中去一个元素的时候,第一个参数是值,第二个参数是是否取出;
func twoSum(nums []int,target int) []int{
hashTable := map[int]int{}
for i,x := range nums {
if p,ok := hashTable[target-x];ok{
return []int{i,p}
}
hashTable[x]=i
}
return nil
}
Rust
复习语法:HashMap的初始化,以及get,insert语法;get出来的值是Option
use std::collections::HashMap;
impl Solution {
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut hashTable = HashMap::new();
for i in 0..nums.len() {
if let Some(index) = hashTable.get(&(target-nums[i])){
return vec![*index,i as i32]
};
hashTable.insert(nums[i],i as i32);
};
return vec![]
}
}
