第一题回顾
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
利用JS解答:
var twoSum = function(nums, target) {
const myMap = new Map();
for (let i = 0; i < nums.length; i++) {
if (myMap.has(target - nums[i])) {
return [myMap.get(target - nums[i]), i];
}
myMap.set(nums[i], i);
}
};
(1)get() 方法用来获取一个 Map 对象中指定的元素。
(2)set() 方法为Map对象添加一个指定键(key)和值(value)的新元素。
(3)has() 返回一个bool值,用来表明map 中是否存在指定元素。
可能需要的知识点
一旦需要根据特征进行分类,就应该用散列表
1.Array.from() 静态方法从可迭代或类数组对象创建一个新的浅拷贝的数组实例。
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
2.Array.toString() 方法返回一个字符串,表示指定的数组及其元素。
*const array1 = [1, 2, 'a', '1a'];
console.log(array1.toString());
// Expected output: "1,2,a,1a"*
var groupAnagrams = function(strs) {
const map = new Map()
for(let str of strs){
let array = Array.from(str);
array.sort()
let key=array.toString();
let list = map.get(key) || []
list.push(str)
map.set(key,list)
}
return Array.from(map.values())
};
函数groupAnagrams的目的是将一个字符串数组strs中的所有字母异位词分组,并将它们放入一个二维数组中返回。
该函数的实现方式是使用哈希表,对于每个字符串,将其排序后作为哈希表的键,将属于同一组的字符串存储在同一个键对应的数组中。
具体来说,该函数的执行步骤如下:
1 初始化一个空的哈希表map。
2 遍历数组strs,对于每个字符串str,执行以下操作:
- 将字符串转换为字符数组,并将其排序。
- 将排序后的字符数组转换为字符串,作为哈希表的键 key。
- 从哈希表map中获取键key对应的值list,如果不存在,则创建一个空数组。
- 将当前字符串str添加到数组list中。
- 将数组list存储回哈希表map中。
3 将哈希表map中的所有值存储到一个二维数组中并返回。