当前位置: 首页 > news >正文

【每日一题】最长交替子数组

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:双层循环
    • 方法二:单层循环
  • 写在最后

Tag

【双层循环】【单层循环】【数组】【2024-01-23】


题目来源

2765. 最长交替子数组


解题思路

两个方法,一个是双层循环,一个是单层循环。

方法一:双层循环

思路

第一层枚举子数组的起点,第二层从起点的下一个元素开始枚举,判断接下来的字符是否满足交替子数组的条件。如是则更新长度,否则调出内层循环。

算法

class Solution {
public:int alternatingSubarray(vector<int>& nums) {int res = -1;int n = nums.size();for (int firstIndex = 0; firstIndex < n; firstIndex++) {for (int i = firstIndex + 1; i < n; i++) {int length = i - firstIndex + 1;if (nums[i] - nums[firstIndex] == (length - 1) % 2) {res = max(res, length);} else {break;}}}return res;}
};

复杂度分析

时间复杂度: O ( n 2 ) O(n^2) O(n2) n n n 为数组 nums 的长度。

空间复杂度: O ( 1 ) O(1) O(1)

方法二:单层循环

思路

解题思路参考 教你一次性把代码写对!O(n) 分组循环(Python/Java/C++/Go/JS/Rust)。

算法

class Solution {
public:int alternatingSubarray(vector<int> &nums) {int ans = -1;int i = 0, n = nums.size();while (i < n - 1) {if (nums[i + 1] - nums[i] != 1) {i++; // 直接跳过continue;}int i0 = i; // 记录这一组的开始位置i += 2; // i 和 i+1 已经满足要求,从 i+2 开始判断while (i < n && nums[i] == nums[i0] + (i - i0) % 2) {i++;}// 从 i0 到 i-1 是满足题目要求的(并且无法再延长的)子数组ans = max(ans, i - i0);i--;}return ans;}
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为数组 nums 的长度。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

http://www.lryc.cn/news/286929.html

相关文章:

  • gin数据解析和绑定
  • TCP服务器最多支持多少客户端连接
  • UML类图学习
  • 死锁面试题详解
  • 【rust/bevy】使用points构造ConvexMesh
  • 【C语言】string.h——主要函数总结
  • 如何在前端优化中减少页面加载时间?
  • Typecho后台无法登录显示503 service unavailable问题及处理
  • Python入门(一)
  • 云表企业级无代码案例-自主开发ERP管理系统
  • Qt —— 编译Qt5版本QFTP库,并实现连接服务、获取列表、上传、下载、删除文件等操作(附源码、附基于Qt5编译好的QFTP库)
  • 碰到es6的...拓展运算符
  • JDK8新特性详解
  • ELK+Filebeat 部署实验
  • 利用wireshark lua扩展能力增加自定义解析器[注释解读版]
  • GPT-5不叫GPT-5?下一代模型会有哪些新功能?
  • 2024.1.23(347.前k个高频元素)
  • MySQL对数据库的操作
  • 解决Unity WebGLInput插件全屏输入的问题
  • Android14实战:调整A2DP音量曲线(五十三)
  • vector讲解
  • nvm 配置淘宝镜像失效,以及安装node后 npm-v 无效
  • 【Android Gradle 插件】Gradle 基础配置 ④ ( Gradle Wrapper 配置作用 | Gradle 下载的依赖库存放位置 )
  • Deepin_Ubuntu_查看树形目录结构(tree)
  • Java Excel分割成许多小文件
  • 【心得】java从CC1链入门CC链个人笔记
  • Django migration 新增外键的坑
  • 相关系数(皮尔逊相关系数和斯皮尔曼相关系数)
  • 了解 Vite 插件
  • 算法竞赛基础:C++双向链表的结构和实现(普通链表、List、静态链表)