2025-06-08:零数组变换Ⅱ 用go语言,给定一个长度为 n 的整数数

B站影视 电影资讯 2025-06-08 06:46 2

摘要:2025-06-08:零数组变换Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums 和一个包含多个查询的二维数组 queries,其中每个查询 queries[i] = [li, ri, vali],表示对数组 nums 中索引区间 [li, ri] 内

2025-06-08:零数组变换Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums 和一个包含多个查询的二维数组 queries,其中每个查询 queries[i] = [li, ri, vali],表示对数组 nums 中索引区间 [li, ri] 内的元素执行如下操作:

对于区间内的每个元素,可以最多减少 vali(每个元素减少的量可独立选择,但不能超过 vali)。

定义“零数组”为所有元素均为 0 的数组。

要求找到一个最小的非负整数 k,满足按顺序执行前 k 条查询后,数组 nums 变成零数组。如果不存在这样的 k,返回 -1。

1

0

1

queries[i].length == 3。

0

1

输入: nums = [2,0,2], queries = [[0,2,1],[0,2,1],[1,1,3]]。

输出: 2。

解释:

对于 i = 0(l = 0, r = 2, val = 1):

在下标 [0, 1, 2] 处分别减少 [1, 0, 1]。

数组将变为 [1, 0, 1]。

对于 i = 1(l = 0, r = 2, val = 1):

数组将变为 [0, 0, 0],这是一个零数组。因此,k 的最小值为 2。

题目来自力扣3356。

1. 初始化:• 创建一个差分数组 deltaArray,长度为 n+1(n 是 nums 的长度),初始化为 0。• 初始化 operations 为 0,表示当前已累积的减少量。• 初始化 k 为 0,表示当前已处理的查询数量。2. 遍历数组 nums:• 对于每个 nums[i](i 从 0 到 n-1):• 将 deltaArray[i] 的值加到 operations 中(operations 表示当前 nums[i] 已累积的减少量)。• 如果 operations • 按顺序处理后续查询(从 k 开始),直到 operations >= nums[i] 或没有更多查询:• 对于每个查询 [left, right, value]:• 更新差分数组:deltaArray[left] += value,deltaArray[right+1] -= value。• 如果当前 i 在 [left, right] 区间内,则 operations += value(因为当前查询可以直接减少 nums[i])。• 增加 k(表示已处理该查询)。• 如果处理完所有查询后 operations 仍然小于 nums[i],则返回 -1。• 如果 ,则继续处理下一个 nums[i]。3. 返回结果:• 如果所有 nums[i] 都满足 ,则返回 k(即需要的最少查询数量)。• 否则返回 -1。package mainimport ( "fmt")func minZeroArray(nums int, queries int)int { n := len(nums) deltaArray := make(int, n+1) operations := 0 k := 0 for i, num := range nums { operations += deltaArray[i] for k

.

# -*-coding:utf-8-*-def minZeroArray(nums, queries):n = len(nums)deltaArray = [0] * (n + 1)operations = 0k = 0for i, num in enumerate(nums):operations += deltaArray[i]while k

我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。

·

来源:曼文教育

相关推荐