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
};

本文完,感谢阅读。

相关推荐
小徐不徐说1 分钟前
C++ 模板与 STL 基础入门:从泛型编程到实战工具集
开发语言·数据结构·c++·qt·面试
艾莉丝努力练剑3 分钟前
【C/C++】类和对象(上):(一)类和结构体,命名规范——两大规范,新的作用域——类域
java·c语言·开发语言·c++·学习·算法
TDengine (老段)33 分钟前
TDengine 中 TDgp 中添加机器学习模型
大数据·数据库·算法·机器学习·数据分析·时序数据库·tdengine
xw544 分钟前
免费的个人网站托管-Cloudflare
服务器·前端
网安Ruler1 小时前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
!win !1 小时前
免费的个人网站托管-Cloudflare
服务器·前端·开发工具
饺子不放糖1 小时前
基于BroadcastChannel的前端多标签页同步方案:让用户体验更一致
前端
饺子不放糖1 小时前
前端性能优化实战:从页面加载到交互响应的全链路优化
前端
Jackson__1 小时前
使用 ICE PKG 开发并发布支持多场景引用的 NPM 包
前端
饺子不放糖1 小时前
前端错误监控与异常处理:构建健壮的Web应用
前端