Loading... > https://leetcode.cn/problems/count-alternating-subarrays/description/?envType=daily-question&envId=2024-05-02 遍历数组,记录上一个数的数值和当前最长交替子数组的长度。如果当前数和之前的数不一样,则交替子数组的长度加一,否则交替子数组长度为一。 当前最长交替子数组的长度,即是以当前元素为结尾的交替子数组的个数,累加到答案当中,最后返回结果即可。 ```c++ class Solution { public: long long countAlternatingSubarrays(std::vector<int>& nums) { const int n = nums.size(); long long res = 1, successive = 1; for (int i = 1; i < n; i++) { successive = successive * (nums[i] ^ nums[i - 1]) + 1; res += successive; } return res; } }; ``` - 时间复杂度:$O(n)$ ,其中 $n$ 为数组的长度。 - 空间复杂度:$O(1)$ 。 最后修改:2024 年 07 月 06 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏