Problem

Given an unsorted array of integers nums, return the length of the longest continuous increasing subsequence (i.e. subarray). The subsequence must be strictly increasing.

A continuous increasing subsequence is defined by two indices l and r (l < r) such that it is [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] and for each l <= i < r, nums[i] < nums[i + 1].

https://leetcode.com/problems/longest-continuous-increasing-subsequence/

Example 1:

Input: nums = [1,3,5,4,7]
Output: 3
Explanation: The longest continuous increasing subsequence is [1,3,5] with length 3.
Even though [1,3,5,7] is an increasing subsequence, it is not continuous as elements 5 and 7 are separated by element 4.

Example 2:

Input: nums = [2,2,2,2,2]
Output: 1
Explanation: The longest continuous increasing subsequence is [2] with length 1. Note that it must be strictly increasing.

Constraints:

  • 1 <= nums.length <= 10⁴
  • -10⁹ <= nums[i] <= 10⁹

Test Cases

1
2
class Solution:
def findLengthOfLCIS(self, nums: List[int]) -> int:
solution_test.py
1
2
3
4
5
6
7
8
9
10
11
12
import pytest

from solution import Solution


@pytest.mark.parametrize('nums, expected', [
([1,3,5,4,7], 3),
([2,2,2,2,2], 1),
])
@pytest.mark.parametrize('sol', [Solution()])
def test_solution(sol, nums, expected):
assert sol.findLengthOfLCIS(nums) == expected

Thoughts

直接遍历一次数组,记录当前连续单调递增的子数组长度,并记录最大长度。

Code

solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def findLengthOfLCIS(self, nums: list[int]) -> int:
max_len = 1
prev = nums[0]
curr_len = 1
for num in nums:
if num > prev:
curr_len += 1
if curr_len > max_len:
max_len = curr_len
else:
curr_len = 1

prev = num

return max_len