题解 | #两数之和#
两数之和
https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f?tpId=295&tqId=745&ru=/exam/interview&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Finterview
思路
首先创建了一个 Map,然后遍历数组 numbers
,
对于每个数字,计算其与目标值的差值 complement
。
如果 complement
已经在 Map 中存在,说明找到了两个满足条件的数,返回它们的下标。
如果没有找到,将当前数字存储在 Map 中,以便后续查找。
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ function twoSum( numbers , target ) { // write code here let numbersMap = new Map(); // 创建一个map,键-值对的集合 for (let i=0; i<numbers.length; i++) { let complement = target - numbers[i]; // 查看当前这个数的减数是否已经在map中, if (numbersMap.has(complement)) { // 找到符合条件的两个数,返回下标(从1开始计算) return [numbersMap.get(complement) + 1, i+1]; } // 当前这个数numbers[i]的减数不在map中,将当前这个数存入map中,键为数,值为数组下标 numbersMap.set(numbers[i], i); } return -1; // 找不到符合条件的两个数 ,就返回-1 } module.exports = { twoSum : twoSum };
map:
在 JavaScript 中,Map 是一种用于存储键-值对的数据结构。它的特点包括:
键可以是任意数据类型,包括原始类型(如字符串、数字、布尔值)以及对象、函数等复杂类型。Map 中的键是唯一的,每个键只能在 Map 中出现一次,这意味着每个键对应一个唯一的值。Map 会保留插入顺序,这意味着你可以按照插入的顺序迭代 Map 中的键-值对。下面是一些常见的 Map 方法和操作:
// 创建 Map: const myMap = new Map(); // 向 Map 中添加键-值对: myMap.set('key1', 'value1'); myMap.set('key2', 'value2'); // 从 Map 中获取值: const value = myMap.get('key1'); // 获取键 'key1' 对应的值检查键是否存在: const keyExists = myMap.has('key1'); // 检查键 'key1' 是否存在于 Map 中 // 从 Map 中删除键-值对: myMap.delete('key1'); // 删除键 'key1' 对应的键-值对 // 清空 Map: myMap.clear(); // 清空 Map 中的所有键-值对 // 获取 Map 的大小(键-值对数量): const size = myMap.size; // 获取 Map 的大小 // 迭代 Map: myMap.forEach((value, key) => { console.log(Key: ${key}, Value: ${value}); }); for (const [key, value] of myMap.entries()) { console.log(Key: ${key}, Value: ${value}); }
Map 是一个非常有用的数据结构,特别适用于需要存储一组键-值对,并保持键的唯一性和插入顺序的情况。它可以用于各种场景,例如缓存、数据处理和数据关联等。