30 天刷题挑战(十二)

题目来源: LeetCode 75 30 天 JavaScript 挑战

2727. 判断对象是否为空

思路

判断 obj 是否为数组

代码

ts 复制代码
// 普通写法
function isEmpty(obj: Obj): boolean {
  if (Array.isArray(obj)) {
    return obj.length === 0
  }

  return Object.keys(obj).length === 0
};

// O(1) 写法
function isEmpty(obj: Obj): boolean {
  for (let key in obj) return false;
  return true;
};

2677. 分块数组

思路

使用数组 splice 方法分割数组

代码

ts 复制代码
function chunk(arr: Obj[], size: number): Obj[][] {
  if (!arr.length) {
    return []
  }

  const res = []
   
  while (arr.length) {
    let _chunk = arr.splice(0, size)
    res.push(_chunk)
  }
   
  return res
};

2619. 数组原型对象的最后一个元素

代码

ts 复制代码
Array.prototype.last = function() {
  const len = this.length
  if (!len) {
    return -1
  }
  return this[len - 1]
};

206. 反转链表

思路

递归法,先递归遍历链表到尾部,回溯的时候修改节点 next 指向

代码

ts 复制代码
function reverseList(head: ListNode | null): ListNode | null {
  return recur(head, null)
};

function recur(cur: ListNode | null, pre: ListNode) {
  if (cur === null) {
    return pre
  }
  // 递归
  let res = recur(cur.next, cur)
  // 回溯
  cur.next = pre
  return res // 返回未节点
}

2130. 链表最大孪生和

思路

  1. 使用快慢指针找到中间节点
  2. 翻转后半部分
  3. 同时遍历两部分,节点值相加得到最大结果

代码

ts 复制代码
function pairSum(head: ListNode | null): number {
   let fast = head
   let slow = head
   let prev = null

   while(fast !== null && fast.next !== null) {
     let next = slow.next
     fast = fast.next.next
     
     slow.next = prev
     prev = slow
     slow = next
   }

   let max = 0

   while(slow !== null) {
     max = Math.max(max, prev.val + slow.val)
     prev = prev.next
     slow = slow.next
   }

  return max
};

104. 二叉树的最大深度

思路

递归法,分别求左右子树高度,最后取大值加一。

代码

ts 复制代码
function maxDepth(root: TreeNode | null): number {
  if (root === null) {
    return 0
  }

  let leftDepth = maxDepth(root.left)
  let rightDepth = maxDepth(root.right)
   
  return Math.max(leftDepth, rightDepth) + 1
};

本文完,感谢阅读🌹

相关推荐
星空寻流年28 分钟前
CSS3(BFC)
前端·microsoft·css3
九月TTS29 分钟前
开源分享:TTS-Web-Vue系列:Vue3实现固定顶部与吸顶模式组件
前端·vue.js·开源
CodeCraft Studio1 小时前
数据透视表控件DHTMLX Pivot v2.1发布,新增HTML 模板、增强样式等多个功能
前端·javascript·ui·甘特图
一把年纪学编程1 小时前
【牛马技巧】word统计每一段的字数接近“字数统计”
前端·数据库·word
llc的足迹1 小时前
el-menu 折叠后小箭头不会消失
前端·javascript·vue.js
?abc!1 小时前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue1 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
九月TTS2 小时前
TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
前端·javascript·vue.js
Johnstons2 小时前
AnaTraf:深度解析网络性能分析(NPM)
前端·网络·安全·web安全·npm·网络流量监控·网络流量分析
whatever who cares2 小时前
CSS3 伪元素(Pseudo-elements)大全
前端·css·css3