3152. Special Array II
Description
An array is considered special if every pair of its adjacent elements contains two numbers with different parity.
You are given an array of integer nums
and a 2D integer matrix queries
, where for queries[i] = [fromi, toi]
your task is to check that nums[fromi..toi]
is special or not.
Return an array of booleans answer
such that answer[i]
is true
if nums[fromi..toi]
is special.
Example 1:
Input: nums = [3,4,1,2,6], queries = [[0,4]]
Output: [false]
Explanation:
The subarray is [3,4,1,2,6]
. 2 and 6 are both even.
Example 2:
Input: nums = [4,3,1,6], queries = [[0,2],[2,3]]
Output: [false,true]
Explanation:
- The subarray is
[4,3,1]
. 3 and 1 are both odd. So the answer to this query isfalse
. - The subarray is
[1,6]
. There is only one pair:(1,6)
and it contains numbers with different parity. So the answer to this query istrue
.
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 105
1 <= queries.length <= 105
queries[i].length == 2
0 <= queries[i][0] <= queries[i][1] <= nums.length - 1
Solutions
Solution: Prefix Sum
- Time complexity: O(n + queries.length)
- Space complexity: O(n + queries.length)
JavaScript
js
/**
* @param {number[]} nums
* @param {number[][]} queries
* @return {boolean[]}
*/
const isArraySpecial = function (nums, queries) {
const n = nums.length;
const specials = Array.from({ length: n }, () => 1);
for (let index = 1; index < n; index++) {
const isSpecial = nums[index] % 2 !== nums[index - 1] % 2;
specials[index] = isSpecial ? specials[index - 1] + 1 : 1;
}
return queries.map(([from, to]) => {
const length = to - from + 1;
return length === specials[to] - specials[from] + 1;
});
};