本文最后更新于:2023年3月19日 晚上
Lt1. 两数之和
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
1 2 3
| 给定 nums = , target = 9 因为 nums + nums = 2 + 7 = 9 所以返回
|
思路
梦开始的地方,map 存所有数字,再循环遍历数组,map 里是否存在目标数字减去当前数字即可。
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
var twoSum = function (nums, target) { if (nums.length < 2) return null; const numMap = new Map(); nums.map((num, i) => { numMap.set(num, i); });
let result = null;
if ( nums.some((num, index) => { const needNum = target - num; if (numMap.has(needNum) && numMap.get(needNum) !== index) { result = [index, numMap.get(needNum)]; return true; } }) ) { return result; } };
|
二叉树的之字形层序遍历
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树之字形层序遍历的结果是
[
[3],
[20,9],
[15,7]
]
示例 1
输入
输出
思路
在普通层次遍历上添加判断 res 数组中个数即可,如果是偶数则反向。
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
function zigzagLevelOrder(root) { if (!root) return []; const queue = []; let row = []; const res = []; queue.push(root); while (queue.length) { row = row.concat(queue.splice(0, queue.length)); const temp = []; while (row.length) { const node = row.shift(); temp.unshift(node.val); if (node.left) queue.push(node.left); if (node.right) queue.push(node.right); } if (res.length % 2 === 0) { res.push(temp.reverse()); } else { res.push(temp); } } return res; } module.exports = { zigzagLevelOrder: zigzagLevelOrder, };
|