📜  打印最长递增的连续子数组(1)

📅  最后修改于: 2023-12-03 15:39:41.804000             🧑  作者: Mango

打印最长递增的连续子数组

介绍

在一个整数数组中,找到最长递增的连续子数组,并打印出来。例如,对于数组 [1, 2, 3, 2, 5, 6, 1, 2, 3, 4],最长递增的连续子数组是 [1, 2, 3, 4],打印出来即可。

算法

一种简单的解法是使用两个指针 startend,分别指向连续递增子数组的起始位置和结束位置。每次移动 end 指针,直到找到一个非递增元素。此时,我们可以计算出当前连续递增子数组的长度,并更新最长长度和最长子数组的起始位置。然后,将 start 指针移到最近的一个递增元素处,继续寻找下一个连续递增子数组。

这个算法的时间复杂度为 O(n),空间复杂度为 O(1)

代码

以下是使用 Python 语言实现的代码:

def longest_increasing_subarray(nums):
    """
    找到最长递增的连续子数组,并打印出来

    :param nums: 整数数组
    :return: None
    """
    start, end = 0, 0
    longest_start, longest_length = 0, 0

    while end < len(nums):
        if end == len(nums) - 1 or nums[end+1] <= nums[end]:
            # 当前元素是递增子数组的最后一个元素
            length = end - start + 1
            if length > longest_length:
                # 更新最长子数组的起始位置和长度
                longest_start = start
                longest_length = length
            # 将 start 指针移到最近的一个递增元素处
            start = end + 1
        end += 1

    print(nums[longest_start : longest_start+longest_length])

# 示例
nums = [1, 2, 3, 2, 5, 6, 1, 2, 3, 4]
longest_increasing_subarray(nums) # 输出 [1, 2, 3, 4]

代码的思路与算法中所述相同。每次迭代都检查当前位置是否是递增子数组的最后一个位置,如果是,则计算并更新最长子数组的信息,并将 start 指针移到下一个可能的递增元素处。最后,打印出最长递增子数组即可。