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)。

相关推荐
zxctsclrjjjcph5 小时前
【高并发内存池】从零到一的项目之centralcache整体结构设计及核心实现
开发语言·数据结构·c++·链表
炯哈哈5 小时前
【上位机——MFC】单文档和多文档视图架构
开发语言·c++·mfc·上位机
柃歌5 小时前
【LeetCode Solutions】LeetCode 176 ~ 180 题解
数据结构·数据库·sql·算法·leetcode
袁气满满~_~5 小时前
LeetCode:101、对称二叉树
算法·leetcode·职场和发展
利刃大大6 小时前
【网络编程】四、守护进程实现 && 前后台作业 && 会话与进程组
linux·网络·c++·网络编程·守护进程
oioihoii6 小时前
C++23 std::tuple与其他元组式对象的兼容 (P2165R4)
c++·链表·c++23
赵和范6 小时前
C++:书架
开发语言·c++·算法
龙湾开发7 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 05.纹理贴图
c++·笔记·学习·3d·图形渲染·贴图
yasuniko8 小时前
C++线程库
开发语言·c++
还有几根头发呀8 小时前
深入理解C/C++内存管理:从基础到高级优化实践
c++