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

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

相关推荐
会编程的吕洞宾7 分钟前
RAG检索质量怎么评估?3个指标+LLM裁判实战
java·开发语言·人工智能·后端
卢总霸气10 分钟前
上海交大机动学院学位论文参考文献Zotero CSL 样式-2026
java
段一凡-华北理工大学16 分钟前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章07:高炉煤气:产生规律与全厂用户平衡
java·前端·能源
咖啡八杯21 分钟前
Redis 工具封装:RedisCache 对 Operations 体系的二次封装
java·数据库·redis·缓存·框架·springboot·若依
wno70427 分钟前
Springboot国际化信息(i18n)解析
java·spring boot·后端
eleven_4u32 分钟前
QPS如何计算,如何部署架构
java·linux·运维·jvm·中间件
牧瀬クリスだ44 分钟前
Redis Hash实战:高效存储对象与购物车
java·数据库·redis·算法·哈希算法
文丑颜不良啊1 小时前
LeetCode1141~1160题目解析
java·leetcode
木井巳1 小时前
【动态规划: 路径问题】下降路径最小和
java·算法·leetcode·动态规划·推荐算法
秋饼1 小时前
MySQL 分库分表完全指南:ShardingSphere-JDBC 实战、分片键选型、场景边界、20 个生产坑与 30 道面试点
java·mysql·面试·shardingsphere·分库分表·后端架构