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

本文完,感谢阅读🌹

相关推荐
(⊙o⊙)~哦4 分钟前
JavaScript substring() 方法
前端
无心使然云中漫步27 分钟前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
jiao0000130 分钟前
数据结构——队列
c语言·数据结构·算法
Bug缔造者33 分钟前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_1 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
迷迭所归处2 小时前
C++ —— 关于vector
开发语言·c++·算法
麒麟而非淇淋2 小时前
AJAX 入门 day1
前端·javascript·ajax
2401_858120532 小时前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
leon6252 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林2 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先