小R定义一个数组为“稳定的”,当且仅当数组中相邻两个元素之差的绝对值不超过1。例如,数组 [2,3,2,2,1] 是稳定的,而 [1,3,2] 则不是。小R拿到一个数组,她想知道这个数组中最长的“稳定的”连续子数组的长度是多少。你能帮她解答吗?
测试样例
样例1:
输入:
n = 5 ,a = [2, 4, 2, 3, 2]
输出:3
样例2:
输入:
n = 6 ,a = [1, 2, 2, 3, 4, 1]
输出:5
样例3:
输入:
n = 7 ,a = [5, 5, 6, 7, 7, 6, 5]
输出:7
定义子数组:子数组是一个连续的元素序列。检查数组中各个子数组是否“稳定”
相邻元素差值:需要遍历数组中的元素,比较相邻元素的差值。如果某两个相邻元素的差的绝对值大于1,那么它们不属于“稳定的”数组的一部分,需要重新开始新的“稳定子数组”的检查。
维护当前最大稳定子数组长度:遍历数组时,维护一个变量 current_length 来记录当前正在检查的稳定子数组的长度。如果当前元素与前一个元素满足“稳定”条件,则 current_length 增加 1;否则,重置 current_length 为 1,表示从当前元素开始一个新的子数组。同时,我们还需要一个变量 max_length 来记录遍历过程中遇到的最大稳定子数组的长度。
需要特别注意边界条件: 如果数组长度为 1 或空数组,则它本身就是稳定的,最长的稳定子数组长度为 1。 如果数组中所有元素都相等,整个数组本身就是一个稳定的子数组。
如果数组的长度小于等于 1,直接返回 1。
初始化两个变量:max_length 为 1(最小的稳定子数组的长度),current_length 为 1(当前稳定子数组的长度)。
从数组的第二个元素开始,逐个与前一个元素比较:
如果相邻元素之差的绝对值不超过 1,则增加 current_length。
如果相邻元素之差的绝对值超过 1,则更新 max_length 并将 current_length 重置为 1。
最后返回 max_length,即最长稳定子数组的长度。
时间复杂度:只需要遍历一次数组,对每个元素进行常数时间的操作,因此为O(n)
空间复杂度:O(1),我用了常数级别的额外空间来存储 max_length 和 current_length