30天刷题挑战(三十)

题目来源: 面试经典 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
};

本文完,感谢阅读。

相关推荐
We་ct12 分钟前
LeetCode 236. 二叉树的最近公共祖先:两种解法详解(递归+迭代)
前端·数据结构·算法·leetcode·typescript
小白菜又菜13 分钟前
Leetcode 229. Majority Element II
算法·leetcode·职场和发展
Frostnova丶21 分钟前
LeetCode 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
算法·leetcode·哈希算法
用泥种荷花22 分钟前
【LangChain.js学习】 提示词模板
前端
认真的薛薛42 分钟前
2-监控:elk采集各种日志并出图
前端·chrome·elk
历程里程碑1 小时前
普通数组---合并区间
java·大数据·数据结构·算法·leetcode·elasticsearch·搜索引擎
叶落阁主1 小时前
别再从 0 造后台了:`antdv-next-admin`,开箱即用的 Vue 3 中后台脚手架
前端
yiranlater1 小时前
状态驱动渲染和事件驱动模型
前端
yuki_uix1 小时前
用 useState 管理服务端数据?不如试试 React Query 来“避坑”
前端
薛定e的猫咪1 小时前
Vibe Coding范式实战:用AI工具链(Stitch+Figma+ai studio+Trae)快速开发全栈APP
前端·人工智能·react.js·github·figma