Leetcode打卡:交替组II

news2024/11/28 13:36:08

执行结果:通过

题目:3208 交替组II

给你一个整数数组 colors 和一个整数 k ,colors表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] :

  • colors[i] == 0 表示第 i 块瓷砖的颜色是 红色 。
  • colors[i] == 1 表示第 i 块瓷砖的颜色是 蓝色 。

环中连续 k 块瓷砖的颜色如果是 交替 颜色(也就是说除了第一块和最后一块瓷砖以外,中间瓷砖的颜色与它 左边 和 右边 的颜色都不同),那么它被称为一个 交替 组。

请你返回 交替 组的数目。

注意 ,由于 colors 表示一个  ,第一块 瓷砖和 最后一块 瓷砖是相邻的。

示例 1:

输入:colors = [0,1,0,1,0], k = 3

输出:3

解释:

交替组包括:

示例 2:

输入:colors = [0,1,0,0,1,0,1], k = 6

输出:2

解释:

交替组包括:

示例 3:

输入:colors = [1,1,0,1], k = 4

输出:0

解释:

提示:

  • 3 <= colors.length <= 105
  • 0 <= colors[i] <= 1
  • 3 <= k <= colors.length

代码以及解题思路

代码:

class Solution:
    def numberOfAlternatingGroups(self, colors: List[int], k: int) -> int:
        ans = 0
        start, n = 0, len(colors)
        From_head = True # 从头开始检查是否交替
        while start < n:
            if From_head:
                for i in range(start, start + k - 1):
                    if colors[i%n] == colors[(i+1)%n]:
                        start = i + 1 # 直接跳到i+1,start~i+1的都不合法
                        break
                else: # 当前窗口全交替,下一个只需检查最后两位是否交替
                    ans += 1
                    start += 1
                    From_head = False
            else:
                if colors[(start+k-1)%n] == colors[(start+k-2)%n]:
                    From_head = True
                    start += k - 1
                else:
                    ans += 1
                    start += 1

        return ans

解题思路:

  1. 初始化变量
    • ans:记录满足条件的交替子数组的数量。
    • start:当前滑动窗口的起始位置。
    • n:颜色数组 colors 的长度。
    • From_head:布尔值,表示当前是否从头开始检查整个窗口的交替性。
  2. 滑动窗口遍历
    • 使用一个 while 循环遍历数组,条件是 start < n,确保不会越界。
    • 从头开始检查(From_head = True
      • 使用一个 for 循环检查从 start 到 start + k - 1 的窗口内的元素是否交替。
      • 如果在这个窗口内发现相邻元素颜色相同,则更新 start 为 i + 1,并跳出循环,因为当前窗口不满足交替条件,需要从下一个位置重新开始检查。
      • 如果整个窗口检查完毕且满足交替条件,则增加 ans 的值,表示找到了一个满足条件的子数组。
      • 更新 start 为 start + 1,准备检查下一个窗口,并设置 From_head = False,表示下一个窗口只需检查最后两个元素是否交替。
    • 不从头开始检查(From_head = False
      • 直接检查当前窗口的最后一个元素和倒数第二个元素是否交替。
      • 如果它们颜色相同,说明当前窗口不满足交替条件,需要将 From_head 设置为 True 并更新 start 为 start + k - 1,准备从头开始检查下一个窗口。
      • 如果它们颜色不同,则增加 ans 的值,并更新 start 为 start + 1,准备检查下一个窗口。
  3. 处理周期性边界条件
    • 在数组遍历中,使用 % n 来处理数组首尾相连的情况,确保索引不会越界。
  4. 返回结果
    • 当 while 循环结束后,返回 ans,即满足条件的交替子数组的数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Windows下编译支持https的wsdl2h

下载源码 在官网下载源码 安装Openssl 下载OpenSSL并安装&#xff0c;安装完成后需要将OpenSSL的路径添加到环境变量中 配置VS 1、打开工程 2、因为前面安装的OpenSLL是64位的&#xff0c;因此需要创建一个X64的配置 打开配置管理器&#xff0c;然后选择新建&#xff0…

利用Prompt工程为LLM提升推理能力

利用Prompt工程为LLM提升推理能力 基于策略的推理详解ReAct: 推理与行动思维链&#xff1a;逐步解决问题反思&#xff1a;深入分析和自我审查与代理架构的集成实际应用代码附录 众所周知&#xff0c;一个精心设计的Prompt能够显著增强大型语言模型&#xff08;LLMs&#xff09;…

[C++ 核心编程]笔记 4.1 封装

4.1.1 封装的意义 封装是C面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体&#xff0c;表现生活中的事物将属性和行为加以权限控制 封装意义一: 在设计类的时候&#xff0c;属性和行为写在一起&#xff0c;表现事物 语法: class 类名{ 访问权限: 属性 /行为 }…

基于Qt实现的自定义树结构容器:设计与应用

在Qt框架中&#xff0c;尽管其提供了许多强大的容器类&#xff08;如 QList, QMap, QTreeWidget 等&#xff09;&#xff0c;但缺少一个通用的、灵活的树结构容器&#xff0c;直接支持多层级数据管理。为了满足这些需求&#xff0c;本文设计并实现了一个可复用的自定义树结构容…

Web登录页面设计

记录第一个前端界面&#xff0c;暑假期间写的&#xff0c;用了Lottie动画和canvas标签做动画&#xff0c;登录和注册也连接了数据库。 图片是从网上找的&#xff0c;如有侵权私信我删除&#xff0c;谢谢啦~

钟睒睒的“傲慢与偏见”

文章内容根据网络内容整理形成 最近&#xff0c;钟睒睒关于绿瓶水不适合长期饮用的言论&#xff0c;在网上引起了一番新的热议&#xff0c;让刚平静不久的包装饮用水竞争&#xff0c;再次掀起一阵波澜&#xff0c;同时&#xff0c;其对于企业家直播带货的等系列看法&#xff0c…

【ArcGISPro】使用AI提取要素-土地分类(sentinel2)

Sentinel2数据处理 【ArcGISPro】Sentinel-2数据处理-CSDN博客 土地覆盖类型分类 处理结果

【技术文档:技术传播的灯塔】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Qt-系统相关(2)多线程网络

Qt多线程 在 Qt 中&#xff0c;多线程的处理⼀般是通过 QThread类 来实现。 QThread 代表⼀个在应⽤程序中可以独⽴控制的线程&#xff0c;也可以和进程中的其他线程共享数据。 QThread 对象管理程序中的⼀个控制线程。 QThread 常⽤ API&#xff1a; 使用线程 关于创建线程…

永久免费使用最好的Markdown编辑器——Typora

介绍 Typora 是一款轻量级的 Markdown 编辑器&#xff0c;其最为出众的特点是&#xff1a; 所见即所得。 Typora 于2021年11月23日推出了第一个正式版&#xff0c;并转为收费。不过价格也算合理&#xff0c;89元/3台设备&#xff0c;为一次买断制。 直到2022年年中&#xff0…

Linux环境实现c语言编程

Linux环境实现c语言编程 准备工作 准备一台Linux虚拟机/机器 操作流程 打开Linux机器 打开终端 查看是否有GCC编译器 GCC是什么 GCC是GNU编译器集合&#xff08;GNU Compiler Collection&#xff09;的简称。它是一套免费的开源编程语言编译器&#xff0c;支持多种编程语…

VTK中对于相机camera的设置

1. 相机的核心属性 在 VTK 中&#xff0c;vtkCamera 的核心属性有默认值。如果你不设置这些属性&#xff0c;相机会使用默认值来渲染场景。 Position&#xff08;默认值&#xff1a;(0, 0, 1)&#xff09;&#xff1a; 默认情况下&#xff0c;相机位于 Z 轴正方向的 (0, 0, 1)…

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5&#xff0c;下载cmake&#xff0c;vs2022&#xff0c;git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…

Python开发环境搭建+conda管理环境

下载Miniconda 推荐从清华镜像下载安装包 Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 打开网页后&#xff0c;下拉到最后找到Miniconda3-latest前缀的文件&#xff0c;或者网页中直接搜索Miniconda3-latest&#xff0c;都可以找…

深度学习:GPT-2的MindSpore实践

GPT-2简介 GPT-2是一个由OpenAI于2019年提出的自回归语言模型。与GPT-1相比&#xff0c;仍基于Transformer Decoder架构&#xff0c;但是做出了一定改进。 模型规格上&#xff1a; GPT-1有117M参数&#xff0c;为下游微调任务提供预训练模型。 GPT-2显著增加了模型规模&…

C++设计模式-策略模式-StrategyMethod

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都编码到对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不使用的算法也是一个性能负担。 如何在运…

Harbor安装、HTTPS配置、修改端口后不可访问?

Harbor安装、HTTPS配置、修改端口后不可访问&#xff1f; 大家好&#xff0c;我是秋意零。今天分享Harbor相关内容&#xff0c;安装部分可完全参考官方文档&#xff0c;写的也比较详细。 安装Harbor 官方文档&#xff1a;https://goharbor.io/docs/2.12.0/install-config/ …

DMS2024|思腾合力受邀参加第二届CCF数字医学大会

随着人工智能技术的不断进步&#xff0c;其在医学领域的应用日益广泛。从医学影像分析、疾病诊断到个性化治疗方案设计&#xff0c;人工智能正在逐步改变传统的医疗模式。未来&#xff0c;数字医学将更加注重数据的整合与挖掘&#xff0c;推动医学研究的深入与创新。 2024年11…

Python 绘制 向量减法

Python 绘制 向量减法 flyfish import matplotlib.pyplot as plt# 向量数据 a [1, 2] b [3, 2]# 计算-a 和 a-b minus_b [-x for x in b] # 反转向量b得到-b a_minus_b [a[i] minus_b[i] for i in range(2)] # 计算a - b# 绘制原点 plt.plot([0], [0], ko) # 黑色圆点…

工作坊报名|使用 TEN 与 Azure,探索你的多模态交互新场景

GPT-4o Realtime API 发布&#xff0c;语音 AI 技术正在进入一场新的爆发。语音AI技术的实时语音和视觉互动能力将为我们带来更多全新创意和应用场景。 实时音频交互&#xff1a; 允许应用程序实时接收并响应语音和文本输入。自然语音生成&#xff1a; 减少 AI 技术生成的语音…