题目
如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。
你有一个整数数组 nums 和一个二维整数矩阵 queries,对于 queries[i] = [fromi, toi],请你帮助你检查
子数组 nums[fromi…toi] 是不是一个 特殊数组 。返回布尔数组 answer,如果 nums[fromi…toi] 是特殊数组,则 answer[i] 为 true
,否则,answer[i] 为 false 。
示例 1:
输入:nums = [3,4,1,2,6], queries = [[0,4]]
输出:[false]
解释:
子数组是 [3,4,1,2,6]。2 和 6 都是偶数。
示例 2:
输入:nums = [4,3,1,6], queries = [[0,2],[2,3]]
输出:[false,true]
解释:
子数组是 [4,3,1]。3 和 1 都是奇数。因此这个查询的答案是 false。 子数组是
[1,6]。只有一对:(1,6),且包含了奇偶性不同的数字。因此这个查询的答案是 true。
提示:
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
解题思路
初次尝试,使用和昨日一样的思路会在最后一个数据当中出现时间超时的状况,因此我们要改变思路,我们可以考虑前缀和的思路,先遍历所有的数字,判断其与前一个数是否满足关系,同一个符合区间内的数值一致。根据区间数组给出的两端数值是否一致进行判断而是否符合标准。
代码
class Solution {
public:
vector<bool> isArraySpecial(vector<int>& nums, vector<vector<int>>& queries) {
int n=nums.size();
vector<int> biao(n);
//记录
for(int i=1;i<n;i++)
{
//符合的数+0 不符合的+1
//同一个符合区间内 记录的数值一致
biao[i]=biao[i-1]+(nums[i-1]%2==nums[i]%2);
}
vector<bool> ans;
n=queries.size();
for(int i=0;i<n;i++)
{
int start=queries[i][0],end=queries[i][1];
ans.push_back(biao[start]==biao[end]);
}
return ans;
}
};