📅  最后修改于: 2023-12-03 15:39:41.804000             🧑  作者: Mango
在一个整数数组中,找到最长递增的连续子数组,并打印出来。例如,对于数组 [1, 2, 3, 2, 5, 6, 1, 2, 3, 4]
,最长递增的连续子数组是 [1, 2, 3, 4]
,打印出来即可。
一种简单的解法是使用两个指针 start
和 end
,分别指向连续递增子数组的起始位置和结束位置。每次移动 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
指针移到下一个可能的递增元素处。最后,打印出最长递增子数组即可。