数组中找到一个(>=左侧)并且(<=右侧)的数

例如array[] = {7, 10, 2, 6, 19, 22, 32},找出该数组中一些数,要求是该数大于它的左侧所有值,小于它的右侧所有值。

解法

使用额外数组,比如rightMin[],来帮我们记录原始数组array[i]右边(包括自己)的最小值。

假如原始数组为: array[] = {7, 10, 2, 6, 19, 22, 32},

那么rightMin[] = {2, 2, 2, 6, 19, 22, 32}.

也就是说,7右边的最小值为2, 2右边的最小值也是2。

有了这样一个额外数组,当我们从头开始遍历原始数组时,我们保存一个当前最大值 max,

如果当前最大值刚好等于rightMin[i], 那么这个最大值一定满足条件。还是刚才的例子。

def find(nums):
    right_min = [0 for _ in range(len(nums))]
    right_min[-1] = nums[-1]
    for i in range(len(nums)-2,-1,-1):
        right_min[i] = min(nums[i],right_min[i+1])
    left_max = nums[0]
    res = []
    for i in range(len(nums)):
        if (nums[i]>=left_max) and (nums[i]<=right_min[i]):
            left_max = nums[i]
            res.append(nums[i])
    return res

nums = [7,10,2,6,19,22,32]
print(find(nums))