题目描述
代码解答
class Solution { public: bool isArraySpecial(vector& 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,因为所有相邻元素的奇偶性都不同,满足特殊数组的定义。
还没有评论,来说两句吧...