当前位置: 首页 > news >正文

LeetCode 3101.交替子数组计数:等差数列求和(较详题解)

【LetMeFly】3101.交替子数组计数:等差数列求和(较详题解)

力扣题目链接:https://leetcode.cn/problems/count-alternating-subarrays/

给你一个二进制数组 nums

如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组

返回数组 nums 中交替子数组的数量。

 

示例 1:

输入: nums = [0,1,1,1]

输出: 5

解释:

以下子数组是交替子数组:[0][1][1][1] 以及 [0,1]

示例 2:

输入: nums = [1,0,1,0]

输出: 10

解释:

数组的每个子数组都是交替子数组。可以统计在内的子数组共有 10 个。

 

提示:

  • 1 <= nums.length <= 105
  • nums[i] 不是 0 就是 1

解题方法:等差数列求和

首先需要能看懂:

  1. 若相邻两个元素不相同,则这两个元素必定不能在一个交替子数组中。
  2. 若从lr的相邻元素都不同,则lr的任一子数组都是交替子数组

因此任务明确了。只需要将原始数组划分为若干个最长交替子数组的集合:

例如数组[0, 1, 0, 0, 0, 1]是由三个最长交替子数组组成,

[0, 1, 0, 0, 0, 1] = [0, 1, 0] + [0] + [0, 1]

这样就只剩下最后一个问题:对于长度为length(最长交替子)数组,一共有多少个子数组呢?

例如对于长度为4的数组[0, 1, 0, 1],其下标为[0, 1, 2, 3],其子数组分别为:

  • 00、从01、从02、从03,共计4个;
  • 11、从12、从13,共计3个;
  • 22、从23,共计2个;
  • 33,共计1个。

子数组个数总计1 + 2 + 3 + 4个。

长度为length的数组一共有 1 + 2 + ⋯ + l e n g t h = ( 1 + l e n g t h ) × l e n g t h 2 1+2+\cdots+length=\frac{(1 + length) \times length}{2} 1+2++length=2(1+length)×length个子数组。

至此,问题解决。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/140226055

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Docekr】容器自动重启/取消自动重启
  • 【算法笔记自学】第 5 章 入门篇(3)——数学问题
  • 计网_计算机网络概述
  • Python和MATLAB微机电健康推导算法和系统模拟优化设计
  • 基于用户的协同过滤算法
  • 【Linux系统】动态库和静态库 动态库加载
  • RGB树-美团2023笔试(codefun2000)
  • SSM高校教师教学质量评估系统-计算机毕业设计源码03344
  • SpringBoot+OSS实现文件上传
  • 基于深度学习LightWeight的人体姿态检测跌倒系统源码
  • Redis数据结构解析-RedisObject
  • vb.netcad二开自学笔记5:ActiveX链接CAD的.net写法
  • 【JVM系列】Full GC(完全垃圾回收)的原因及分析
  • 【手写数据库内核组件】01 解析树的结构,不同类型的数据结构组多层的链表树,抽象类型统一引用格式
  • 深入分析SSL/TLS服务器的证书(C/C++代码实现)
  • 【EOS】Cleos基础
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Consul Config 使用Git做版本控制的实现
  • php的插入排序,通过双层for循环
  • spring学习第二天
  • windows-nginx-https-本地配置
  • 经典排序算法及其 Java 实现
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端存储 - localStorage
  • 微服务核心架构梳理
  • 在Unity中实现一个简单的消息管理器
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • raise 与 raise ... from 的区别
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ‌JavaScript 数据类型转换
  • #1014 : Trie树
  • #QT(智能家居界面-界面切换)
  • #职场发展#其他
  • (12)目标检测_SSD基于pytorch搭建代码
  • (3) cmake编译多个cpp文件
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • . NET自动找可写目录
  • .ai域名是什么后缀?
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Remoting学习笔记(三)信道
  • .stream().map与.stream().flatMap的使用
  • @vue/cli 3.x+引入jQuery
  • [ solr入门 ] - 利用solrJ进行检索
  • [C# WPF] 如何给控件添加边框(Border)?
  • [CSS3备忘] transform animation 等
  • [ESP32 IDF]web server
  • [flutter]一键将YAPI生成的api.json文件转为需要的Dart Model类的脚本
  • [HNOI2008]玩具装箱toy