零数组变换 I
问题
给定一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] = [li, ri]。
对于每个查询 queries[i]:
- 在
nums的下标范围[li, ri]内选择一个下标 。 - 将选中的每个下标对应的元素值减 1。
零数组 是指所有元素都等于 0 的数组。
如果在按顺序处理所有查询后,可以将 nums 转换为 零数组 ,则返回 true,否则返回 false。
示例
示例 1:
输入: nums = [1,0,1], queries = [[0,2]]
输出: true
解释:
- 对于 i = 0:
- 选择下标子集
[0, 2]并将这些下标处的值减 1。 - 数组将变为
[0, 0, 0],这是一个零数组。
- 选择下标子集
示例 2:
输入: nums = [4,3,2,1], queries = [[1,3],[0,2]]
输出: false
解释:
- 对于 i = 0:
- 选择下标子集
[1, 2, 3]并将这些下标处的值减 1。 - 数组将变为
[4, 2, 1, 0]。
- 选择下标子集
- 对于 i = 1:
- 选择下标子集
[0, 1, 2]并将这些下标处的值减 1。 - 数组将变为
[3, 1, 0, 0],这不是一个零数组。
- 选择下标子集
代码
func isZeroArray(nums []int, queries [][]int) bool { n := len(nums) diff := make([]int,n+1) for _,q := range queries { l,r := q[0],q[1] diff[l] += 1 if r + 1 < len(diff){ diff[r+1] -= 1 } } //每个位置被覆盖次数 converage := make([]int,n) curr := 0 for i:= 0; i < n; i++ { curr += diff[i] converage[i] = curr } //是否每个位置都被覆盖过 for i := 0; i < n; i++ { if nums[i] > converage[i] { return false } } return true }
浙公网安备 33010602011771号