57. 二叉树的层序遍历算法

56期问题及答案

最大子序和

题目描述:

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6

解释:连续子数组 [4,-1,2,1] 的和最大,为 6

示例 2:

输入:nums = [1]输出:1

示例 3:

输入:nums = [5,4,-1,7,8]输出:23

提示:

  • 1 <= nums.length <= 3 * 10^4

  • -10^5 <= nums[i] <= 10^5

以下是使用 TypeScript 实现的解答:

function maxSubArray(nums: number[]): number {
  let maxSum = nums[0];
  let currentSum = nums[0];

  for (let i = 1; i < nums.length; i++) {
    currentSum = Math.max(nums[i], currentSum + nums[i]);
    maxSum = Math.max(maxSum, currentSum);
  }

  return maxSum;
}

解题思路:

  • 使用动态规划的思想解决问题。

  • 初始化两个变量 maxSumcurrentSum,分别用于记录全局最大和和当前连续子数组的和,初始值均为数组的第一个元素 nums[0]

  • 从数组的第二个元素开始遍历,遍历过程中,更新 currentSum 的值,它可以是当前元素 nums[i] 或是当前元素与前一个连续子数组和 currentSum + nums[i] 的较大值。

  • 每次遍历过程中,都将 maxSum 更新为当前 maxSumcurrentSum 的较大值,即 maxSum = Math.max(maxSum, currentSum)

  • 遍历完成后,maxSum 中存储的即为最大和。

时间复杂度分析:

  • 遍历数组一次,时间复杂度为 O(N),其中 N 是数组长度。

空间复杂度分析:

  • 使用了常数个额外变量,空间复杂度为 O(1)。

57期

二叉树的层序遍历算法

题目描述:

给定一个二叉树,返回其按层序遍历得到的节点值(即逐层地,从左到右访问所有节点)。

示例:

二叉树如下所示:

3
   / \
  9  20
    /  \
   15   7

返回其层序遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

提示:

  • 树中节点的数目范围是 [0, 2000]

  • -1000 <= Node.val <= 1000

上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值