
移动
要求一个序列中的单调区间,可以使用两个指针,分别指向当前的开始位置和结束位置,然后从左到右依次检查每一个数值,判断其与前一个数的大小关系,如果保持单调性则继续往后移动结束位置的指针,否则更新开始位置的指针为结束位置的指针,继续从当前位置向后检查。当一个足够长的单调区间被发现时,可以记录其起始和终止位置,然后继续从终止位置向后检查,查找下一个单调区间,直到整个序列检查结束。
例如,对于序列[3, 4, 5, 1, 2, 3, 4, 3, 2, 1],通过如下代码可以求出其所有的单调区间:

Python
Pythondef find_monotonic_intervals(nums):
intervals = []
start = 0
for i in range(1, len(nums)):
if nums[i] < nums[i-1] or i == len(nums)-1: # 当前位置不满足单调性
if i-1 > start: # 找到了一个单调区间
intervals.append((start, i-1, nums[start+1] > nums[start]))
start = i-1
return intervals
运行该函数可以得到如下结果:
[(0, 2, True), (3, 7, False), (8, 9, False)]
这表示序列中包含3个单调区间,分别为[3, 4, 5]、[5, 1, 2, 3, 4, 3]和[3, 2, 1],其中第一个和最后一个区间是单调递减的,中间的区间是单调递增的。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号