数组算法(二):交替子数组计数

1. 官方描述

给你一个二进制数组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
  • nums[i] 不是 0 就是 1

2. 个人分析

可能大部分人一开始看题意不是很容易理解,我们接下来画图表示:

上图是一个数组,内部数据包含{1,0,0,1,0,1,1},第一个数与第二个数构成了一个子数组:{1,0},程序读取到第三个值时,它与第二个值是一样的,那么第三个值为一个单的子数组,以此类推,从第三到第六的数值构成了子数组{0,1,0,1},最后一个数值构成了一个数组{1}.

那么由上面信息,我们可以得出总数=(1+2)+(1+2+3+4)+1=14

3. 代码实现

cpp 复制代码
class Solution {
public:
    long long countAlternatingSubarrays(vector<int>& nums) {
        long long sum = 1 , temp = 1;
        int i = 0;
        while (i < nums.size()-1)
        {
            if (nums[i] == nums[++i])
            {
                sum += 1;
                temp = 1;
            }else{
                temp++;
                sum += temp;
            }
        }

        return sum;
    }
};
相关推荐
故事和你912 分钟前
洛谷-【图论2-2】最短路4
开发语言·数据结构·c++·算法·动态规划·图论
我爱cope3 分钟前
【力扣hot100:239. 滑动窗口最大值】
算法·leetcode·职场和发展
XINVRY-FPGA5 分钟前
XC7Z010-2CLG400I Xilinx Zynq-7000 FPGA
arm开发·嵌入式硬件·算法·fpga开发·硬件工程·dsp开发·fpga
承渊政道7 分钟前
【贪心算法】(经典实战应用解析(四):分发饼干、最优除法、跳跃游戏、跳跃游戏Ⅱ、加油站)
数据结构·c++·算法·leetcode·贪心算法·动态规划·哈希算法
m0_629494738 分钟前
LeetCode 热题 100-----24.回文链表
数据结构·算法·leetcode·链表
爱怪笑的小杰杰9 分钟前
Leaflet 实现轨迹拐角自动圆弧化:基于球面几何的高精度平滑算法
前端·javascript·算法·无人机
历程里程碑17 分钟前
53 多路转接select
linux·开发语言·数据结构·数据库·c++·sql·排序算法
ccLianLian17 分钟前
图论·刷题总结
算法·深度优先·图论
_深海凉_18 分钟前
LeetCode热题100-二叉树展开为链表
算法·leetcode·链表
ECT-OS-JiuHuaShan22 分钟前
什么是认知,认知的本质是什么?
数据库·人工智能·算法·机器学习·数学建模