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;
}解题思路:
使用动态规划的思想解决问题。
初始化两个变量
maxSum和currentSum,分别用于记录全局最大和和当前连续子数组的和,初始值均为数组的第一个元素nums[0]。从数组的第二个元素开始遍历,遍历过程中,更新
currentSum的值,它可以是当前元素nums[i]或是当前元素与前一个连续子数组和currentSum + nums[i]的较大值。每次遍历过程中,都将
maxSum更新为当前maxSum和currentSum的较大值,即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分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

152

被折叠的 条评论
为什么被折叠?



