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

devtools/2024/10/19 6:20:53/

【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


http://www.ppmy.cn/devtools/57849.html

相关文章

嵌入式c语言——类型修饰符

register&#xff0c;将变量保存在寄存器中&#xff0c;使得访问速度增加 const是常量&#xff0c;static是静态量&#xff0c;volatile是

文化财经macd顶底背离幅图指标公式源码

DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA),COLORSTICK; JC:CROSS(DIFF,DEA); SC:CROSSDOWN(DIFF,DEA); N1:BARSLAST(JC)1; N2:BARSLAST(SC)1; HH:VALUEWHEN(CROSSDOWN(DIFF,DEA),HHV(H,N1));//上次MACD红柱期间合约最大值 HH2:VALUEWHE…

香橙派AIpro测评:yolo8+usb鱼眼摄像头的Camera图像获取及识别

一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比&#xff0c;同时还可以兼容ubuntu、安卓等多种操作系统&#xff0c;今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV8s算法的部署并使用一个外接的鱼眼USB摄像头…

Java信号量semaphore的原理与使用方法

Semaphore的基本概念 在Java中&#xff0c;Semaphore是位于java.util.concurrent包下的一个类。它的核心就是维护了一个许可集。简单来说&#xff0c;就是有一定数量的许可&#xff0c;线程需要先获取到许可&#xff0c;才能执行&#xff0c;执行完毕后再释放许可。 那么&…

深度解析:机器学习与深度学习的关系与区别

一、前言 在人工智能领域&#xff0c;机器学习与深度学习常常被提及并广泛应用。虽然它们在本质上都是通过数据训练模型以进行预测或分类&#xff0c;但两者之间存在着显著的区别和联系。本文将深入解析机器学习与深度学习的关系与区别&#xff0c;帮助读者更好地理解和应用这…

概率统计(二)

二维离散型 联合分布律 样本总数为16是因为&#xff0c;两封信分别可以放在4个信箱 边缘分布律 条件分布律 独立性 选填才能用秒杀 联合概率乘积不等于边缘概率的乘积则不独立 二维连续型 区间用一重积分面积用二重积分 离散型随机变量

【postgresql】索引

见的索引类型&#xff1a; B-tree 索引&#xff1a;这是最常用的索引类型&#xff0c;适用于大多数查询。B-tree索引可以高效地处理范围查询。 Hash 索引&#xff1a;适用于等值查询&#xff0c;但不支持范围查询。 GiST 索引&#xff1a;通用搜索树&#xff08;GiST&#xf…

Python爬虫零基础实战,简洁实用!

1.爬虫简介 简单来讲&#xff0c;爬虫就是一个探测机器&#xff0c;它的基本操作就是模拟人的行为去各个网站溜达&#xff0c;点点按钮&#xff0c;查查数据&#xff0c;或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。 你可以简单地想象&#xff1a;每个…