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接收,导致局部用例数据溢出

相关推荐
BullSmall1 分钟前
IntelliJ IDEA 安装与环境配置指南(2026 最新)
java·ide·intellij-idea
Q741_1475 分钟前
每日一题 力扣 3474. 字典序最小的生成字符串 贪心 字符串 C++ 题解
c++·算法·leetcode·贪心
Javatutouhouduan5 分钟前
SQL优化从入门到精通!
java·数据库·mysql·sql优化·java面试·后端开发·java程序员
人道领域6 分钟前
LeetCode【刷题日记】:螺旋矩阵逆向全过程,边界缩进优化
算法·leetcode·矩阵
东离与糖宝8 分钟前
aiX-apply-4B小模型Java部署指南:消费级显卡跑AI编程,成本直降95%
java·人工智能
摇滚侠9 分钟前
JAVA 项目教程《苍穹外卖-10》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·微信小程序
wqww_111 分钟前
Java 前后端 WebSocket 完整实现
java·开发语言·websocket
不喝水的鱼儿12 分钟前
KT Qwen3.5-35B-A3B 记录
java·前端·python
少许极端15 分钟前
算法奇妙屋(三十八)-贪心算法学习之路 5
java·学习·算法·贪心算法
woai336416 分钟前
学习JVM-基础篇-Java虚拟机栈&本地方法栈
java·jvm·学习