100266. 交替子数组计数

100266. 交替子数组计数

给你一个二进制数组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 <= 10^5

nums[i] 不是 0 就是 1 。

解题思路与代码实现

使用滑动窗口求解

java 复制代码
class Solution {
	
    public long countAlternatingSubarrays(int[] nums) {
        // 双指针,滑动窗口:窗口[left,right)记录当前连续的交替子数组
        long res = 0;
        int left = 0, right = 1;
        while (right < nums.length) {
        	// 如果窗口内不存在 两个 相邻 元素的值 相同 ,扩展右边界
            while (right < nums.length && nums[right] != nums[right - 1]) {
                right++;
            }
            // 累加当前结果并更新窗口
            long len = right - left;	// 用long防止10^5 * 10^5上溢出
            res += (len + 1) * len/ 2;
            left = right++;	// 更新左边界
        }
        // 考虑边界情况,如0,1,1,1,left=3,right=4,直接退出了循环会少算一次
        if (left == nums.length - 1) {
            res++;
        }
        // 返回结果
        return res;
    }
}

踩坑点

最初计算len时用int接收,导致局部用例数据溢出

相关推荐
悟空码字几秒前
文档变形记,SpringBoot实战:3步让Word乖乖变PDF
java·spring boot·后端
用户2190326527353 分钟前
能省事”。SpringBoot+MyBatis-Plus:开发效率提升10倍!
java·spring boot·mybatis
小楼v10 分钟前
构建高效AI工作流:Java生态的LangGraph4j框架详解
java·后端·工作流·langgraph4j
jvstar23 分钟前
JNI 面试题及答案
java
虾说羊26 分钟前
JVM 高频面试题全解析
java·开发语言·jvm
雨中飘荡的记忆31 分钟前
MyBatis SQL解析模块详解
java·mybatis
czlczl2002092532 分钟前
Spring Cache 全景指南
java·后端·spring
POLITE333 分钟前
Leetcode 3.无重复字符的最长子串 JavaScript (Day 4)
javascript·算法·leetcode
invicinble37 分钟前
透视IDEA,IDEA认识到什么程度算精通
java·ide·intellij-idea
wanzhong233338 分钟前
NLS开发日记1-初始化项目
java·项目