📅  最后修改于: 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)。