|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天的题目:
给定一个整数数组,判断这个数组中是否有 132 模式的子序列。
一个 132 模式的子序列 a[m], a[n], a[o] 被定义为:m < n < o 并且 a[m] < a[o] < a[n] 。
注意:子序列在原数组中不一定是连续的。
示例 1:
输入:[1, 2, 3, 4]
输出:False 示例 2:
输入:[3, 1, 4, 2]
输出:True
解释:序列中有 1 个 132 模式的子序列:[1, 4, 2] 。 示例 3:
输入:[-1, 3, 2, 0]
输出:True
解释:序列中有 3 个 132 模式的的子序列:[-1, 3, 2], [-1, 3, 0] 和 [-1, 2, 0] 。
 欢迎大家一起答题! 
本帖最后由 kinkon 于 2020-4-30 08:01 编辑
跑起来估计会比较慢
- def f386(nums):
- if len(set(nums)) <= 2:
- return False
- n = len(nums)
- left = nums[0]
- for i in range(1, n - 2):
- left = min(left, nums[i])
- if left < max(nums[i:]):
- mid, right = i + 1, n - 1
- while mid < right:
- while mid < right and nums[right] < left:
- right -= 1
- while mid < right and nums[mid] <= nums[right]:
- mid += 1
- if mid < right:
- return True
- return False
复制代码
来个双针
- def f386(nums):
- n = len(nums)
- if len(set(nums)) <= 2:
- return False
- left, right = 0, n - 1
- while left + 1 < right:
- if nums[left] < nums[right] < max(nums[left + 1:right]):
- return True
- if nums[left] >= nums[right]:
- left += 1
- elif nums[left] < nums[right]:
- right -= 1
-
- return False
复制代码
|
|