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

本文完,感谢阅读。

相关推荐
苦藤新鸡3 分钟前
18.矩阵同行同列全置零
数据结构·c++·算法·力扣
研☆香4 分钟前
JS中的三种显示弹窗
开发语言·前端·javascript
副露のmagic4 分钟前
更弱智的算法学习 day48
学习·算法
俩毛豆5 分钟前
HarmonyOS APP开发-一文讲清使用Web组件加载网页的三种方法-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
前端·华为·harmonyos
汽车仪器仪表相关领域8 分钟前
双组分精准快检,汽修年检利器:MEXA-324M汽车尾气测量仪项目实战全解
大数据·人工智能·功能测试·测试工具·算法·机器学习·压力测试
C_心欲无痕13 分钟前
Next.js 路由系统对比:Pages Router vs App Router
开发语言·前端·javascript
LawrenceLan15 分钟前
Flutter 零基础入门(二十二):Text 文本组件与样式系统
开发语言·前端·flutter·dart
赫凯18 分钟前
【强化学习】第六章 Dyna-Q 算法
算法
程序员-King.18 分钟前
day154—回溯—分割回文串(LeetCode-131)
算法·leetcode·深度优先·回溯
程序员-King.18 分钟前
day155—回溯—组合(LeetCode-77)
算法·leetcode·回溯