「每日LeetCode」2020年10月3日

本文最后更新于:2023年3月19日 晚上

Lt1. 两数之和

1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

1
2
3
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路

梦开始的地方,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
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
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
输入

1
{1,#,2}

输出

1
[[1],[2]]

思路

在普通层次遍历上添加判断 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 TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/

/**
*
* @param root TreeNode类
* @return int整型二维数组
*/
function zigzagLevelOrder(root) {
// write code here
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,
};