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

本文完,感谢阅读🌹

相关推荐
CoovallyAIHub2 分钟前
摄像头如何“看懂”你的手势?手势识别实现新人机交互
深度学习·算法·计算机视觉
over6978 分钟前
用 React Context 实现全局主题切换:从零搭建暗黑/亮色模式系统
前端·react.js·面试
ycgg11 分钟前
深入理解 AbortSignal:前端异步操作取消的原生方案
前端
妮妮喔妮12 分钟前
前端字节面试大纲
前端·面试·职场和发展
白兰地空瓶14 分钟前
告别“千里传荔枝”:React useContext 打造跨层级通信“任意门”
前端·react.js
Q741_14715 分钟前
C++ 栈 模拟 力扣 394. 字符串解码 每日一题 题解
c++·算法·leetcode·模拟·
AI科技星21 分钟前
张祥前统一场论:空间位移条数概念深度解析
数据结构·人工智能·经验分享·算法·计算机视觉
恋猫de小郭22 分钟前
Flutter 小技巧之帮网友理解 SliverConstraints overlap
android·前端·flutter
王中阳Go23 分钟前
别再卷 Python 了!Go + 字节 Eino 框架,才是后端人转 AI 的降维打击(附源码)
后端·面试·go
小oo呆24 分钟前
【自然语言处理与大模型】LangChainV1.0入门指南:核心组件Structured Output
前端·javascript·easyui