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

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

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

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


🍔 目录

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

🚩 题目链接

⛲ 题目描述

给你一个二进制数组nums 。

如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组 。

返回数组 nums 中交替子数组的数量。

示例 1:

输入: nums = 0,1,1,1

输出: 5

解释:

以下子数组是交替子数组:0111 以及 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;
    }
}
🥦 运行结果

💬 共勉

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

相关推荐
不才不才不不才4 分钟前
Spring AI 实战:聊天、提示词、记忆三件套
java·人工智能·spring·ai
北域码匠5 分钟前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
手写码匠1 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe11 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
一 乐2 小时前
家政服务管理系统|基于springboot + vue家政服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·家政服务管理系统
Matrix_112 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue2 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist
碳基硅坊3 小时前
Spring AI:把大模型接进 Spring 应用
java·人工智能·spring ai
黄毛火烧雪下3 小时前
Java 核心知识点总结(一)
java·开发语言
x138702859573 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio