3101.力扣每日一题7/6 Java(接近100%解法)

  • 博客主页:音符犹如代码
  • 系列专栏:算法练习
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

目录

思路

解题方法

时间复杂度

空间复杂度

Code


思路

主要是基于对题目要求的理解和对数组遍历的应用。题目要求计算数组中所有可能的交替子数组的数量,其中交替子数组是指相邻元素不相等的子数组。

解题方法

  1. 初始化 :设置两个变量,ans 用于记录所有交替子数组的总数,cnt 用于记录以当前元素结尾的交替子数组的数量。由于每个元素自身至少可以构成一个交替子数组(即使它与前一个元素相同),因此 cnt 初始化为 1。

  2. 遍历数组:从数组的第二个元素开始遍历(因为第一个元素自身就是一个交替子数组,无需比较)。对于每个元素,检查它是否与前一个元素不同。

    • 如果不同,说明可以将前一个交替子数组扩展一个当前元素来形成新的交替子数组,因此 cnt 递增。
    • 如果相同,说明无法将前一个交替子数组扩展,因此 cnt 重置为 1,表示当前元素自身构成一个交替子数组。
  3. 累加结果 :在每次迭代中,将 cnt 的值加到 ans 上,因为 cnt 表示了以当前元素结尾的所有交替子数组的数量。

  4. 返回结果 :遍历完成后,ans 中存储的就是所有交替子数组的总数,将其返回。

时间复杂度

时间复杂度是 O(n),其中 n 是数组 nums 的长度。因为我们只需要遍历一次数组即可完成计算,所以时间复杂度与数组的长度成正比。

空间复杂度

空间复杂度是 O(1)。尽管我们使用了几个变量(ans、cnt 和循环变量 i),但这些变量的数量是固定的,不随输入数组的大小而增加。因此,我们可以认为算法使用的额外空间是常数级别的,即空间复杂度为 O(1)。

Code

java 复制代码
class Solution {  
    public long countAlternatingSubarrays(int[] nums) {  
        long ans = 0; // 用于累积交替子数组的总数  
        int cnt = 1;  // 以当前元素结尾的交替子数组的数量(初始化为1,因为每个元素自身都是一个交替子数组)  
        for (int i = 0; i < nums.length; i++) {  
            // 如果当前元素与前一个元素不同,则增加以当前元素结尾的交替子数组数量  
            if (i > 0 && nums[i] != nums[i - 1]) {  
                cnt++;  
            } else {  
                // 如果当前元素与前一个元素相同,则重置以当前元素结尾的交替子数组数量为1  
                cnt = 1;  
            }  
            // 将以当前元素结尾的交替子数组数量加到总数上  
            ans += cnt;  
        }  
        return ans; // 返回所有交替子数组的总数  
    }  
}

One today is worth two tomorrows. Benjamin Franklin 一个今天抵得上两个明天。------本杰明弗兰克林

相关推荐
谢亮_vipxieliang13 分钟前
Java 21 新特性实战:Record、Sealed、模式匹配
java·开发语言
@陈小鱼18 分钟前
基于CNN-Transformer的无袖带血压估计
人工智能·深度学习·神经网络·算法·cnn·transformer·血压
霸道流氓气质21 分钟前
LLM 应用限流与熔断机制完全指南:从多层防护架构到Java生产级弹性实战
java·开发语言·架构
黄金龙PLUS37 分钟前
5个1280比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密
LOVE️YOU40 分钟前
Python 数据结构的本质:位置、对象引用、Hash 与可变性
数据结构·python·哈希算法
不会就选b43 分钟前
算法日常・每日刷题--<动态规划>1
java·数据结构·算法
晚安code44 分钟前
JVM 内存结构入门:程序计数器、虚拟机栈、本地方法栈与堆的溢出诊断
java·jvm
shehuiyuelaiyuehao1 小时前
算法54,链表 两数相加
数据结构·算法·链表
自强的小白1 小时前
Spring事务失效的场景
java·spring
小蒜学长1 小时前
基于SpringBoot+Vue的小学数学智能出题系统(代码+数据库+LW)
java·数据库·spring boot·后端·智能出题系统