题目描述
代码解答
class Solution { public: bool isArraySpecial(vector<int>& nums) { int len = nums.size(); if (len == 1) { return true; // 单个元素的数组总是特殊数组 } // 遍历数组,检查相邻元素的奇偶性 for (int i = 0; i < len - 1; i++) { if (nums[i] % 2 == nums[i + 1] % 2) { return false; // 如果相邻两个元素的奇偶性相同,则不是特殊数组 } } return true; // 所有相邻元素的奇偶性都不同,是特殊数组 } };
代码解释:
以下是代码的详细解释:
首先,计算数组
nums
的长度,并将其存储在变量len
中。检查数组长度是否为1。如果是,则直接返回
true
,因为单个元素的数组总是特殊数组。
这个函数的时间复杂度是O(n),其中n是数组
nums
的长度。这是因为循环需要遍历数组的所有元素一次。空间复杂度是O(1),因为除了输入数组nums
之外,没有使用额外的空间。进入循环,循环的条件是
i < len - 1
,这意味着循环会遍历数组中的所有元素,除了最后一个元素。在循环内部,使用模运算符
%
检查当前元素nums[i]
和下一个元素nums[i + 1]
的奇偶性。如果这两个元素的奇偶性相同(即都是奇数或者都是偶数),则返回false
,因为它们不符合特殊数组的定义。如果循环完成,没有找到相邻元素的奇偶性相同的组合,则返回
true
,因为所有相邻元素的奇偶性都不同,满足特殊数组的定义。