Leetcode3208. 交替组 II

Every day a Leetcode

题目来源:3208. 交替组 II

解法1:环形数组

把数组复制一份拼接起来,和 3101 题一样,遍历数组的同时,维护以 i 为右端点的交替子数组的长度 cnt。

如果 i ≥ n 且 cnt ≥ k,那么 i 就是一个长为 k 的交替子数组的右端点,答案加一。注意这里要判断 i ≥ n,从而避免重复统计。

代码实现时,不需要复制数组,而是用 i mod n 的方式取到对应的值。

代码:

c 复制代码
/*
 * @lc app=leetcode.cn id=3208 lang=cpp
 *
 * [3208] 交替组 II
 */

// @lc code=start
class Solution
{
public:
    int numberOfAlternatingGroups(vector<int> &colors, int k)
    {
        int n = colors.size();
        int ans = 0, cnt = 0;
        for (int i = 0; i < n * 2; i++)
        {
            if (i > 0 && colors[i % n] == colors[(i - 1) % n])
            {
                cnt = 0;
            }
            cnt++;
            ans += i >= n && cnt >= k;
        }
        return ans;
    }
};
// @lc code=end

结果:

复杂度分析:

时间复杂度:O(n),其中 n 是数组 colors 的长度。

空间复杂度:O(1)。

相关推荐
学习星球7 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
小灰灰搞电子8 小时前
C++ 引用折叠详解
c++
布莱克6059 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
牛油果子哥q10 小时前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++
万法若空10 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++
血小板要健康11 小时前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
小小晓.12 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
hetao173383712 小时前
2026-08-27~29 hetao1733837 的刷题记录
c++·算法
chen<>13 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
会周易的程序员13 小时前
企业私有 AI 算力服务器架构设计:异构四节点 + QUIC 微服务
运维·服务器·c++·人工智能·微服务·架构