【LeetCode:3101. 交替子数组计数 + 滑动窗口 + 数学公式】

|-----------|
| 🚀 算法题 🚀 |

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

|-----------|
| 🚀 算法题 🚀 |


🍔 目录

    • [🚩 题目链接](#🚩 题目链接)
    • [⛲ 题目描述](#⛲ 题目描述)
    • [🌟 求解思路&实现代码&运行结果](#🌟 求解思路&实现代码&运行结果)
      • [⚡ 滑动窗口 + 数学公式](#⚡ 滑动窗口 + 数学公式)
        • [🥦 求解思路](#🥦 求解思路)
        • [🥦 实现代码](#🥦 实现代码)
        • [🥦 运行结果](#🥦 运行结果)
    • [💬 共勉](#💬 共勉)

🚩 题目链接

⛲ 题目描述

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

numsi 不是 0 就是 1 。

🌟 求解思路&实现代码&运行结果


⚡ 滑动窗口 + 数学公式

🥦 求解思路
  1. 通过读取题目的意思可以知道,要想求解本题,实质是找到有多少子数组中存在多少个两个相邻元素的值不相同的情况,假设来到当前的位置,此时我们想要知道的是,以它为开头的子数组中,存在多少个相邻元素不相同的情况。可以通过滑动窗口来求解。
  2. 在去寻找有多少个相同元素不同的过程中,我们通过一个变量来记录形如 01 或者 10 的个数有多少个。为什么呢?大家可以多举一些情况,注意,此时不考虑单独的情况, 这种情况我们直接累加到最后的结果即可。假设形如 01 ,此时贡献为1;形如010,贡献为3;形如0101,贡献为6,形如01010,贡献为10,依次类推,得到每次贡献的数值公式为 cnt * (cnt + 1) / 2。
  3. 最后,加上每一个字符的情况,也就是字符串的长度,直接返回即可。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下递归和迭代的解法。
🥦 实现代码
java 复制代码
class Solution {
    public long countAlternatingSubarrays(int[] nums) {
        long ans = 0;
        int n = nums.length;
        int left = 0;
        for (int right = 0; right < n; right++) {
            int ori = nums[right];
            long cnt = 0;
            while (right < n - 1 && ori != nums[right + 1]) {
                cnt++;
                ori = nums[right + 1];
                right++;
            }
            ans += cnt * (cnt + 1) / 2;
            left = right;
        }
        return ans + n;
    }
}
🥦 运行结果

💬 共勉

|----------------------------------|
| 最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |

相关推荐
AI你一生一世1 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影1 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯2 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
ZhengEnCi3 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是3 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考4 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt6 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
海的透彻6 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat6 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习7 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt