📌  相关文章
📜  大于K的元素大于不大于K的元素的最长子数组的长度(1)

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

大于K的元素大于不大于K的元素的最长子数组的长度

给定一个整数数组和一个整数K,编写一个函数来计算大于K的元素大于不大于K的元素的最长子数组的长度。

解法

我们可以使用滑动窗口来解决这个问题。我们维护两个指针leftright,它们表示滑动窗口的左边界和右边界。

我们首先右移right指针,直到窗口中的第一个元素大于K。然后,我们移动right指针,将所有大于K的元素都包括在窗口中。

我们不断右移left指针,直到窗口中不再包含大于K的元素。此时,我们的窗口就包含了最长的子数组。

最后,我们返回窗口的大小作为答案。

代码

以下是Python实现的代码:

def find_length(arr, k):
    left = right = 0
    max_len = 0
    while right < len(arr):
        if arr[right] > k:
            right += 1
        elif right > left and arr[right] <= k and arr[right - 1] > k:
            left = right - 1
            while left >= 0 and arr[left] > k:
                left -= 1
            left += 1
        else:
            right += 1
        max_len = max(max_len, right - left)
    return max_len
示例
arr = [1, 2, 1, 3, 4]
k = 2
print(find_length(arr, k))  # 3,因为[1, 3, 4]这个子数组满足条件
时间复杂度

这个算法的时间复杂度是$O(n)$,其中$n$是数组的长度。这是因为我们只遍历数组一次,每次操作都花费常数时间。