📜  所有元素相同的最长子数组(1)

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

所有元素相同的最长子数组

给定一个数组,找到数组中所有元素相同的最长子数组的长度。

例如,给定数组 [1,1,2,2,2,1,1],最长子数组的长度为 3,因为数字 2 重复了三次。

解法

一种简单的解法是用双指针,一个指向子数组的开头,一个指向子数组的结尾。

从头开始遍历数组,用一个变量 cur_length 记录当前循环中元素相同的子数组长度,同时用另一个变量 max_length 记录前面循环中元素相同的最大子数组长度。

每次遇到相邻的相同元素时,将 cur_length 加 1,否则将 cur_length 设为 1。同时如果 cur_length 大于 max_length,更新 max_length 的值。

代码示例
def find_longest_subarray(arr):
    """
    找到数组中所有元素相同的最长子数组的长度
    """
    # cur_length 记录当前循环中元素相同的子数组长度
    # max_length 记录前面循环中元素相同的最大子数组长度
    cur_length = max_length = 1
    # 从头开始遍历数组
    for i in range(1, len(arr)):
        if arr[i] == arr[i-1]:
            cur_length += 1
        else:
            cur_length = 1
        if cur_length > max_length:
            max_length = cur_length
    return max_length
时间复杂度

遍历一遍数组,时间复杂度为 O(n)。

空间复杂度

只使用了常量大小的额外空间,空间复杂度为 O(1)。

参考资料