Leetcode 2348:零填充子数组的数量
作者:互联网
使用数组时,经常会遇到需要计算满足特定条件的子数组数的问题。在本文中,我们将讨论一个 TypeScript 解决方案,用于计算整数数组中填充为 0 的子数组的数量。我们将提供代码的分步说明,以及其时间和空间的复杂性。
问题陈述
给定一个整数数组,我们需要计算填充 0 的子数组的数量。子数组是数组中连续的非空元素序列。nums
例
假设。那么输出应该是 .作为子数组出现 [4] 有 0 次出现。作为子数组出现 [2,0] 有 0 次出现。没有出现大小大于 2 的子数组,填充 0。因此,我们返回 6。nums = [1,3,0,0,2,0,0,4]
6
溶液
我们可以通过遍历给定的数组并检查任何连续的数组来解决这个问题。我们保留所有此类子数组的计数,并在末尾返回计数。nums
0
这是相同的 TypeScript 代码:
函数 zeroFilledSubarray(nums: number[]): number { // 初始化总和为零 的子数组数的计数 let count = 0; 初始化子数组 中连续零数的计数,让 currentCount = 0; 遍历数组 for (let i = 0; i < nums。长度;i++) { // 如果当前元素为零 ,则 (nums[i] === 0) { // 递增当前计数 currentCount++; 将当前计数添加到总计数计数 += 当前计数中; 如果当前元素不为零 } 否则 { // 将当前计数重置为零 currentCount = 0; } } // 返回总计数返回计数 ; }
让我们逐行分解代码:
- 我们定义了一个函数,它接受一个整数数组并返回一个数字。
zeroFilledSubarray
nums
- 我们将两个变量初始化为 0。
count
currentCount
- 我们使用循环遍历数组。
nums
for
- 如果 的当前元素等于 0,则递增 1 并将其添加到 .这是因为我们找到了一个连续 0 的子数组,我们需要将该子数组的计数添加到总数中。
nums
currentCount
count
- 如果当前元素 不等于 0,则重置为 0。这是因为如果我们遇到一个非零元素,则连续 0 的当前子数组被破坏。
nums
currentCount
- 最后,我们返回填充的所有子数组的计数。
0
时间复杂度
上述函数的时间复杂度是给定数组的长度在哪里。这是因为我们只遍历整个数组一次。O(n)
n
nums
空间复杂性
The space complexity of the above function is as we are not using any additional data structure for computation.O(1)
Implementation
Let’s look at some of the implementation details of the above code:
打字稿
TypeScript 是 JavaScript 的一个超集,它为语言添加了可选的静态类型和其他功能。由于其类型安全性、增强的工具和更好的代码组织,它在开发人员中越来越受欢迎。
在上面的代码中,我们使用 TypeScript 定义函数。我们将输入参数的类型指定为整数数组,将函数的返回类型指定为数字。zeroFilledSubarray
nums
循环遍历数组
在上面的代码中,我们使用循环来迭代给定的数组。我们从索引 0 开始循环,并使用数组的 length 属性继续到数组的末尾。for
nums
nums
计数子数组
为了计算填充 0 的子数组的数量,我们使用两个变量和 .我们将这两个变量初始化为 0。我们用来跟踪到目前为止我们遇到的连续零的数量。count
currentCount
currentCount
如果当前元素为 0,则我们递增 1 并将其添加到 .这是因为我们找到了一个连续 0 的子数组,我们需要将该子数组的计数添加到总数中。nums
currentCount
count
如果当前元素 不是 0,则重置为 0。这是因为如果我们遇到一个非零元素,则连续 0 的当前子数组被破坏。我们需要从下一个位置再次开始计数。nums
currentCount
返回计数
最后,我们返回 的值。这是给定数组中填充为 0 的所有子数组的总数。count
nums
引用
如果您有兴趣了解有关本文中涵盖的主题的更多信息,请查看以下资源:
- Leet代码问题 2348
- 打字稿文档
- 大O表示法
标签:编程,算法, TypeScript 来源: