LeetCode 3105.最长的严格递增或递减子数组

给你一个整数数组 nums

返回数组 nums严格递增严格递减的最长非空子数组的长度。

示例 1:

**输入:**nums = [1,4,3,3,2]

**输出:**2

解释:

nums 中严格递增的子数组有[1][2][3][3][4] 以及 [1,4]

nums 中严格递减的子数组有[1][2][3][3][4][3,2] 以及 [4,3]

因此,返回 2

示例 2:

**输入:**nums = [3,3,3,3]

**输出:**1

解释:

nums 中严格递增的子数组有 [3][3][3] 以及 [3]

nums 中严格递减的子数组有 [3][3][3] 以及 [3]

因此,返回 1

示例 3:

**输入:**nums = [3,2,1]

**输出:**3

解释:

nums 中严格递增的子数组有 [3][2] 以及 [1]

nums 中严格递减的子数组有 [3][2][1][3,2][2,1] 以及 [3,2,1]

因此,返回 3

提示:

  • 1 <= nums.length <= 50
  • 1 <= nums[i] <= 50

分组循环,严格递增或严格递减的为一组,找最长的组:

cpp 复制代码
class Solution {
public:
    int longestMonotonicSubarray(vector<int>& nums) {
        int n = nums.size();

        int ans = 0;

        int i = 0;
        while (i < n) {
            int start = i;
            ++i;
            while (i < n && (nums[i] - nums[i - 1]) * (nums[start + 1] - nums[start]) > 0) {
                ++i;
            }

            ans = max(ans, i - start);

            // 循环结束时,[start, i - 1]是严格递增或递减的
            // 下次循环从i - 1位置开始
            if (i < n && nums[i] != nums[i - 1]) {
                --i;
            }
        }

        return ans;
    }
};

如果nums的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

相关推荐
呃呃本几秒前
算法题(矩阵)
线性代数·算法·矩阵
呃呃本10 分钟前
算法题(普通数组、矩阵)
线性代数·算法·矩阵
计算机安禾16 分钟前
【计算机网络】第11篇:链路状态路由协议——Dijkstra算法与OSPF的分区架构
计算机网络·算法·架构
珂朵莉MM16 分钟前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第二赛季优化题--遗传算法
人工智能·算法
gihigo199817 分钟前
严格耦合波分析计算光栅衍射效率算法
算法
可编程芯片开发19 分钟前
基于双Qlearning强化学习的温差发电系统电压动态补偿算法matlab仿真
算法·matlab·双qlearning强化学习·电压动态补偿·温差发电系统
Java成神之路-23 分钟前
【LeetCode 刷题笔记】69.x 的平方根 | 二分查找经典刷题题解
算法·leetcode
灵智实验室24 分钟前
PX4状态估计技术EKF2详解(一):EKF2 开篇——从分离到统一
算法·无人机·px 4
小智老师PMP24 分钟前
六月PMP晚启动急救|现在开始,每天2-3小时,稳冲一次上岸(附可直接照搬计划)
算法·软件工程·求职招聘·产品经理·敏捷流程
tankeven43 分钟前
动态规划专题(11):区间动态规划之三角剖分问题
c++·算法·动态规划