数组中找出每个数后面比它大的数中最小的那个;
数组中找出每个数后面比它小的数中最大的那个。
给定一个整数数组A。从某一些起始索引,你可以做一系列的跳跃。其中的(第1,第3,第5 ......)跳跃称为奇数跳跃,(第2,第4,第6 ......)跳跃称为偶数跳跃
。
你可以从索引i
以下列方式跳转到索引 j
(i <j):
在奇数跳跃(即跳跃1,3,5,...)期间,跳转到索引j,使得A [i] <= A [j]
并且A [j]是可能的最小值。如果有多个这样的索引j,则只能跳转到最小的索引 j。 在偶数跳跃(即跳跃2,4,6,...)期间,跳转到索引j,使得A [i]> = A [j]
,A [j]是最大的可能值。如果有多个这样的索引j,则只能跳转到最小的索引 j。(可能存在某些索引,不存在合法的跳跃)
如果从该索引开始,您可以通过跳转一些次数(大于等于0次)到达数组的末尾(索引A.length - 1),那么这是一个有效的起始索引
方法一单调栈:
1 class Solution: 2 """ 3 @param A: An integer array A 4 @return: Return the number of good starting indexes 5 """ 6 def oddEvenJumps(self, A): 7 # Write your code here 8 stack, array, upper = [], sorted([(a, i) for i, a in enumerate(A)]), [-1 for i in range(len(A))]