单调栈——数组中找出每个数后面比它大的数中最小的那个 odd even jump

数组中找出每个数后面比它大的数中最小的那个;

数组中找出每个数后面比它小的数中最大的那个。


给定一个整数数组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))]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值