数组中找到一个(>=左侧)并且(<=右侧)的数
例如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))