
前缀和的优势
给定一个数组,前缀和的特点在于,任意给出一对始末位置,能够用O(1)的时间复杂度得到始末位置之间所有元素的某种关系。
题型分析
这道题目正是“给出始末位置,检测其中元素特点”那一类,那我们就想,如果能够将这种 “元素关系” 与 “奇偶性交替的检验” 挂钩,便可大大提高检测效率。
可以说,本解法可推广解决几乎所有 判断给定区间元素是否恒满足某种关系 那一类需求。
核心部分解释:关于预处理
关于判断语句 (nums[i]%2 != nums[i-1]%2) 为什么可以用 int 型接收

由此就不难理解后面的判断:
- 若 prefix[ A ] = prefix[ B ]
 - 则说明位置A, B间所有元素使 (nums[i]%2 == nums[i-1]%2) = 0
 - 也就是均满足 (nums[i]%2 != nums[i-1]%2) = true
 
class Solution {
public:
    vector<bool> isArraySpecial(vector<int>& nums, vector<vector<int>>& queries) {
        vector<int>prefix(nums.size());//辅助数组,记录前缀和
        for(int i=1; i<nums.size(); i++)
        {
			prefix[i] = prefix[i-1] + (nums[i]%2 == nums[i-1]%2);
		}
		vector<bool>ret;
		for(auto p: queries)
		{
			ret.push_back(prefix[p[0]] == prefix[p[1]]); 
		}
		return ret;
    }
};
 
 
思路来源
本解法借鉴解题达人 @灵茶山艾府,膜拜大佬!

~希望对你有启发!~



















