3427. Special Array Ii¶
Difficulty: Medium
LeetCode Problem View on GitHub
3427. Special Array II
Medium
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 subarray 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 <= 1051 <= nums[i] <= 1051 <= queries.length <= 105queries[i].length == 20 <= queries[i][0] <= queries[i][1] <= nums.length - 1
Solution¶
class Solution {
public boolean[] isArraySpecial(int[] nums, int[][] queries) {
int n = nums.length;
boolean[] ans = compute(nums);
int[] prefix = new int[n];
for (int i = 1; i < n; i++) {
prefix[i] = prefix[i - 1] + (ans[i] ? 1 : 0);
}
boolean[] results = new boolean[queries.length];
for (int i = 0; i < queries.length; i++) {
int u = queries[i][0];
int v = queries[i][1];
if (u == v) {
results[i] = true;
} else {
int req = v - u;
int current = prefix[v] - prefix[u];
results[i] = (current == req);
}
}
return results;
}
public static boolean[] compute(int[] nums) {
int n = nums.length;
boolean[] res = new boolean[n];
for (int i = 1; i < n; i++) {
res[i] = (nums[i] % 2) != (nums[i - 1] % 2);
}
return res;
}
}
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here