题目来源: 面试经典 150 题
230. 二叉搜索树中第K小的元素
思路
中序遍历,
代码
js
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthSmallest = function(root, k) {
let res
const inOrder = (node) => {
if (node !== null && k > 0) {
inOrder(node.left)
k--
if (k === 0) {
res = node.val
}
inOrder(node.right)
}
}
inOrder(root)
return res
};
219. 存在重复元素 II
思路
使用一个 Set 对象存储数字,遍历数组,向 Set 中存入数字,当 Set 的大小大于 k 时移出最前面的数字,当存在相同的数字时,说明在 k 距离内存在重复数字。
代码
js
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
const set = new Set()
for (let i = 0; i < nums.length; i++) {
if (set.has(nums[i])) {
return true
}
set.add(nums[i])
if (set.size > k) {
set.delete(nums[i - k])
}
}
return false
};
228. 汇总区间
思路
根据题意模拟,向右遍历数组,每次遇到相邻数字差值大于 1 时,就是一个区间,放入结果中。
代码
js
/**
* @param {number[]} nums
* @return {string[]}
*/
var summaryRanges = function(nums) {
let res = []
let start = 0
while (start < nums.length) {
let low = start
start += 1
while (start < nums.length && nums[start] === nums[start - 1] + 1) {
start += 1
}
const high = start - 1
const tmp = ["" + nums[low]]
if (low < high) {
tmp.push("->")
tmp.push("" + nums[high])
}
res.push(tmp.join(""))
}
return res
};
本文完,感谢阅读。