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

LeetCode 3350.检测相邻递增子数组 II:将数组分成多段递增

【LetMeFly】3350.检测相邻递增子数组 II:将数组分成多段递增

力扣题目链接:https://leetcode.cn/problems/adjacent-increasing-subarrays-detection-ii/

给你一个由 n 个整数组成的数组 nums ,请你找出 k最大值,使得存在 两个 相邻 且长度为 k严格递增 子数组。具体来说,需要检查是否存在从下标 ab (a < b) 开始的 两个 子数组,并满足下述全部条件:

  • 这两个子数组 nums[a..a + k - 1]nums[b..b + k - 1] 都是 严格递增 的。
  • 这两个子数组必须是 相邻的,即 b = a + k

返回 k最大可能 值。

子数组 是数组中的一个连续 非空 的元素序列。

 

示例 1:

输入:nums = [2,5,7,8,9,2,3,4,3,1]

输出:3

解释:

  • 从下标 2 开始的子数组是 [7, 8, 9],它是严格递增的。
  • 从下标 5 开始的子数组是 [2, 3, 4],它也是严格递增的。
  • 这两个子数组是相邻的,因此 3 是满足题目条件的 最大 k 值。

示例 2:

输入:nums = [1,2,3,4,4,4,4,5,6,7]

输出:2

解释:

  • 从下标 0 开始的子数组是 [1, 2],它是严格递增的。
  • 从下标 2 开始的子数组是 [3, 4],它也是严格递增的。
  • 这两个子数组是相邻的,因此 2 是满足题目条件的 最大 k 值。

 

提示:

  • 2 <= nums.length <= 2 * 105
  • -109 <= nums[i] <= 109

解题方法:一次遍历

数组[2,5,7,8,9,2,3,4,3,1]由四个递增数组组成:[2,5,7,8,9][2,3,4][3][1],他们的长度分别是4、3、1、1。

  1. 对于相邻的长度为4、3的递增数组,可以设置 k = m i n ( 4 , 3 ) = 3 k=min(4,3)=3 k=min(4,3)=3
  2. 对于单个长度为4的递增数组,可以设置 k = ⌊ 4 2 ⌋ k=\lfloor\frac42\rfloor k=24

一遍遍历更新并计算上述两个值中最大的那个作为答案。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/** @LastEditTime: 2025-10-15 22:20:57*/
class Solution {
public:int maxIncreasingSubarrays(vector<int>& nums) {int ans = 0;for (int lastCnt = 0, nowCnt = 0, i = 0; i < nums.size(); i++) {nowCnt++;if (i == nums.size() - 1 || nums[i] >= nums[i + 1]) {  // 递增数组之尾ans = max({ans, min(lastCnt, nowCnt), nowCnt / 2});lastCnt = nowCnt, nowCnt = 0;}}return ans;}
};
C++ - 写法2
/** @LastEditTime: 2025-10-15 22:16:10*/
class Solution {
public:int maxIncreasingSubarrays(vector<int>& nums) {int ans = 1;int lastVal = 1000000001, lastCnt = 0, nowCnt = 0;for (int t : nums) {if (t <= lastVal) {ans = max(ans, min(lastCnt, nowCnt));ans = max(ans, nowCnt / 2);printf("ans = %d, t = %d, lastCnt = %d, nowCnt = %d\n", ans, t, lastCnt, nowCnt);lastCnt = nowCnt, nowCnt = 1;} else {nowCnt++;}lastVal = t;}return max({ans, min(lastCnt, nowCnt), nowCnt / 2});}
};
Python
'''
LastEditTime: 2025-10-15 22:23:10
'''
from typing import Listclass Solution:def maxIncreasingSubarrays(self, nums: List[int]) -> int:ans = lastCnt = nowCnt = 0for i in range(len(nums)):nowCnt += 1if i == len(nums) - 1 or nums[i] >= nums[i + 1]:ans = max(ans, min(lastCnt, nowCnt), nowCnt // 2)lastCnt = nowCntnowCnt = 0return ans
Java
/** @LastEditTime: 2025-10-15 22:28:53*/
class Solution {public int maxIncreasingSubarrays(List<Integer> nums) {int ans = 0;for (int i = 0, lastCnt = 0, nowCnt = 0; i < nums.size(); i++) {nowCnt++;if (i == nums.size() - 1 || nums.get(i) >= nums.get(i + 1)) {  // 昨天踩过的bug今天不会再踩一次ans = Math.max(ans, Math.max(Math.min(lastCnt, nowCnt), nowCnt / 2));lastCnt = nowCnt;nowCnt = 0;}}return ans;}
}
Go
/** @LastEditTime: 2025-10-15 22:25:04*/
package main// 我发现nowCnt特别容易打成nowCNt
func maxIncreasingSubarrays(nums []int) int {ans, lastCnt, nowCnt := 0, 0, 0for i, t := range nums {nowCnt++if i == len(nums) - 1 || t >= nums[i + 1] {ans = max(ans, max(min(lastCnt, nowCnt), nowCnt / 2))lastCnt, nowCnt = nowCnt, 0}}return ans
}
Rust
/** @LastEditTime: 2025-10-15 22:32:24*/
impl Solution {pub fn max_increasing_subarrays(nums: Vec<i32>) -> i32 {let mut ans: i32 = 0;let mut last_cnt: i32 = 0;let mut now_cnt: i32 = 0;for i in 0..nums.len() {now_cnt += 1;if i == nums.len() - 1 || nums[i] >= nums[i + 1] {ans = ans.max(last_cnt.min(now_cnt)).max(now_cnt / 2);// (last_cnt, now_cnt) = (now_cnt, 0);last_cnt = now_cnt;now_cnt = 0;}}ans}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.dtcms.com/a/488466.html

相关文章:

  • 电影美感褪色青绿色人像街拍摄影后期Lr调色,手机滤镜PS+Lightroom预设下载!
  • seo网站设计工具下载网站系统源码
  • 网站设计软件培训怎么样新野微网站开发
  • 机器学习入门,无监督学习之DBSCAN聚类算法完全指南:面向Java开发者的Python实现详解
  • 哪些网站推广不收费网站设计 原型图
  • yolo v8n模型小样本微调总结
  • 网站制作 呼和浩特南山网站设计方案
  • 如何做家居网站注册公司一年需要多少费用
  • 专门做酒店设计的网站网页设计参考网站
  • 网页设计制作网站首页建筑网建设通网站作用是什么
  • 猎头可以做单的网站做网站的图片大小是多少
  • 盘州市网站建设调用别人网站的数据库
  • 国外设计网站素材网站打开显示站点目录
  • 网址制作网站云南网官网入口
  • 雄安智能网站建设公司郑州的网站建设
  • 大庆网站建设公司台州网站建设网站
  • 建设网站西安万网做网站多少钱
  • 红星美凯龙建设事业中心网站大数据精准营销论文
  • 备案号链接工信部网站3d设计房子的软件
  • rhce第一次作业
  • 【Shell编程学习】Shell基础知识
  • 征婚网站开发呼市网站制作
  • 扬州西区网站建设安康手机网站建设
  • html5自适应网站模版打鱼网站怎么做
  • 新乡高端网站建设app定制开发深圳
  • [Qlib] 回测执行 | `backtest_daily`日频回测
  • 简洁商城网站模板网站终端制作
  • P11215 【MX-J8-T3】水星湖
  • 温湿度传感器技术深度解析:从测量原理到工程落地
  • 将 localhost 代理配置镜像到 WSL