Skip to content

Commit 07a97a8

Browse files
Create 3152. 特殊数组 II.md
1 parent c6a4c29 commit 07a97a8

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#### 3152. 特殊数组 II
2+
3+
难度:中等
4+
5+
---
6+
7+
如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 **特殊数组**
8+
9+
周洋哥有一个整数数组 `nums` 和一个二维整数矩阵 `queries`,对于 `queries[i] = [fromi, toi]`,请你帮助周洋哥检查子数组 `nums[fromi..toi]` 是不是一个 **特殊数组**
10+
11+
返回布尔数组 `answer`,如果 `nums[fromi..toi]` 是特殊数组,则 `answer[i]``true` ,否则,`answer[i]``false`
12+
13+
**示例 1:**
14+
15+
**输入:** nums = \[3,4,1,2,6\], queries = \[\[0,4\]\]
16+
17+
**输出:** \[false\]
18+
19+
**解释:**
20+
21+
子数组是 `[3,4,1,2,6]`。2 和 6 都是偶数。
22+
23+
**示例 2:**
24+
25+
**输入:** nums = \[4,3,1,6\], queries = \[\[0,2\],\[2,3\]\]
26+
27+
**输出:** \[false,true\]
28+
29+
**解释:**
30+
31+
1. 子数组是 `[4,3,1]`。3 和 1 都是奇数。因此这个查询的答案是 `false`
32+
2. 子数组是 `[1,6]`。只有一对:`(1,6)`,且包含了奇偶性不同的数字。因此这个查询的答案是 `true`
33+
34+
**提示:**
35+
36+
* `1 <= nums.length <= 10^5`
37+
* `1 <= nums[i] <= 10^5`
38+
* `1 <= queries.length <= 10^5`
39+
* `queries[i].length == 2`
40+
* `0 <= queries[i][0] <= queries[i][1] <= nums.length - 1`
41+
42+
---
43+
44+
动态规划:
45+
46+
一维数组 `dp[i]` 表示下标 `i` 的数是特殊数组的第几个数。例如 `[3,4,1,2,6]` 所对应的 `dp[i]` 分别是 `[1, 2, 3, 4, 1]`,前四个数为一组特殊数组,最后一个数单独构成一组特殊数组。然后根据给定的区间和当前下标的值进行比较。
47+
48+
```Go
49+
func isArraySpecial(nums []int, queries [][]int) []bool {
50+
n := len(nums)
51+
dp := make([]int, n)
52+
dp[0] = 1
53+
for i := 1; i < n; i++ {
54+
dp[i] = 1
55+
if ((nums[i] ^ nums[i - 1]) & 1 == 1) {
56+
dp[i] = dp[i - 1] + 1
57+
}
58+
}
59+
res := []bool{}
60+
for i := range queries {
61+
gap := queries[i][1] - queries[i][0]
62+
res = append(res, dp[queries[i][1]] >= gap + 1)
63+
}
64+
return res
65+
}
66+
```

0 commit comments

Comments
 (0)