算法练习day1-备战2027届秋招

1、有效的括号

javascript 复制代码
function isValid(s) {
  // 栈
  const stack = []
  const map = {
    ')': '(',
    ']': '[',
    '}': '{',
  }
  for (let char of s) {
    // 匹配右括号
    if (map[char]) {
      // 栈空或者栈顶不匹配
      if (stack.length === 0 || stack.pop() !== map[char]) {
        return false
      }
    } else {
      stack.push(char)
    }
  }
  return stack.length === 0
}
console.log(isValid('{()()[]}'))

2、合并数组区间

javascript 复制代码
function merge(arr) {
  // 数组为空
  // if(arr.length === 0) return []
  arr.sort((a, b) => a[0] - b[0])
  let res = [arr[0]]
  for (let i = 1; i < arr.length; i++) {
    const last = res[res.length - 1]
    const curr = arr[i]
    if (curr[0] < last[1]) {
      // 合并重叠
      last[1] = Math.max(curr[1], last[1])
    } else {
      res.push(curr)
    }
  }
  return res
}
console.log(
  merge([
    [1, 7],
    [2, 6],
    [8, 15],
  ]),
)

3、无重复最长字符串长度

javascript 复制代码
function longlength(str) {
  // 滑动窗口,双指针
  let left = 0
  let maxLen = 0
  const set = new Set()
  for (let right = 0; right < str.length; right++) {
    while (set.has(str[right])) {
      set.delete(str[left])
      left++
    }
    set.add(str[right])
    maxLen = Math.max(maxLen, right - left + 1)
  }
  return maxLen
}

console.log(longlength('abcab'))
相关推荐
码林鼠2 分钟前
flutter状态管理入门教程-Riverpod
开发语言·javascript·flutter
CV爱数码3 分钟前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct
Rabitebla31 分钟前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
Amos_Web43 分钟前
Markdonw语法
开发语言·前端·javascript
远离UE443 分钟前
半拉格朗日学习笔记 动力学 实时渲染
人工智能·算法
小万74244 分钟前
刚发布就冲上GitHub热榜!Filee支持244种格式转换,完全免费还全本机运行
前端
星光不问赶路人1 小时前
Vue 3 对象监听与快照:ref 和 reactive 的关键差异
前端·vue.js
世界一刘先生1 小时前
不引入 JSZip,自己写一个 ZIP 打包器:CRC32、中央目录与 UTF-8 文件名
前端
全栈项目管理程序猿1 小时前
ArcGIS JS 基础教程(34):体元系列 - 等值面 VoxelIsosurface
前端·javascript