📌  相关文章
📜  第一个元素最小的子数组的计数(1)

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

第一个元素最小的子数组的计数
介绍

给定一个整数数组,找到第一个元素最小的子数组,计算这种情况的数量。

示例

输入:[1,2,1,3,4]
输出:2
解释:第一个元素最小的子数组是[1,2,1]和[1]。

解法

使用双指针方法,从左到右遍历数组,用一个指针指向第一个元素最小的子数组的起始位置,另一个指针向右移动,寻找最小子数组的终止位置。

当右指针所在元素小于左指针所在元素时,更新左指针位置,计算子数组数量,继续右指针向右移动。当右指针所在元素大于等于左指针所在元素时,继续右指针向右移动,直到找到下一个比左指针所在元素更小的元素。

代码
class Solution:
    def first_min_arr_count(self, nums: List[int]) -> int:
        count, l, r = 0, 0, 1
        while r < len(nums):
            if nums[r] < nums[l]:
                count += r - l
                l = r
            elif nums[r] == nums[l]:
                r += 1
            else:
                r += 1
        return count
函数说明
def first_min_arr_count(self, nums: List[int]) -> int:
  • 参数nums:整数数组;
  • 返回值:第一个元素最小的子数组的计数。
复杂度分析
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)