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

相关推荐
小肝一下1 小时前
2. 顺序表和链表
c语言·数据结构·c++·链表·dijkstra·依蕾娜·香香的依蕾娜
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练:【二分答案】案例5:进击的奶牛
c++·二分答案·csp·高频考点·信奥赛·进击的奶牛
伊玛目的门徒10 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
旖-旎13 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
Darkwanderor14 小时前
对Linux的进程控制的研究
linux·运维·c++
云泽80814 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
REDcker15 小时前
libdatachannel 快速入门
c++·webrtc·datachannel
second6016 小时前
第一部分:快速上手 —— 建立 C++ 基本语法与编程范式
开发语言·c++
郝学胜-神的一滴16 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
bksczm16 小时前
linux之线程概念和控制
linux·开发语言·c++