LeetCode 334. Increasing Triplet Subsequence

简介: 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。

v2-b064445032298bda609bb5201f447635_1440w.jpg

Description



Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array.


Formally the function should:

Return true if there exists i, j, k


such that arr[i] < arr[j] < arr[k] given 0 ≤ i < j < k ≤ n-1 else return false.

Note: Your algorithm should run in O(n) time complexity and O(1) space complexity.


Example 1:

Input: [1,2,3,4,5]

Output: true


Example 2:

Input: [5,4,3,2,1]

Output: false


描述



给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。

数学表达式如下:

如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,

使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。


说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。


示例 1:

输入: [1,2,3,4,5]

输出: true


示例 2:

输入: [5,4,3,2,1]

输出: false


思路



  • 声明三个变量 i,j,k 用于表示 nums[i] < nums[j] < nums[k]
  • 首先遍历数组,找到第一对满足 nums[i] < nums[j] 的数。
  • 然后,另 k = j + 1,这个时候我们考虑以下情况
  1. 如果 nums[k] 大于 nums[j] 说明已经有三个数满足条件,我们返回 True;


  1. 如果 nums[k] 在 nums[i] 和 nums[j] 中间,那么只要后面有一个数大于 nums[j], 就一定会大于 nums[k],于是我们更新 j = k;


  1. 如果 nums[k] 小于 nums[i],说明我们找到了更小的数,更新 i = k。此时依然有 nums[i]<\nums[j],但是 j < i,不影响判断的逻辑。



# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2019-03-28 10:02:55
# @Last Modified by:   何睿
# @Last Modified time: 2019-03-28 11:08:49
class Solution:
    def increasingTriplet(self, nums: [int]) -> bool:
        # 声明三个索引变量,用于记录满足条件的之
        i, j, k = 0, 1, 1
        # 元素的个数
        count = len(nums)
        # 找到数组中最前面递增的两个数
        while i < count and j < count and nums[i] >= nums[j]:
            i += 1
            j += 1
        # k 更新为 j 后面的那一个数
        k = j + 1
        while k < count:
            # 如果 nums[k] 比 nums[j] 大,说明已经有三个数满足条件
            if nums[k] > nums[j]: return True
            # 如果 nums[k] 在 nums[i] 和 nums[j] 中间,我们丢掉 nums[j]
            # 更新现有的 j 为 k,因为如果接下来有个数比 nums[j]大,那么一定比 nums[k] 大
            if nums[i] < nums[k] <= nums[j]: j = k
            # 如果 nums[k] 比 nums[i] 还小,我们更新 i 
            if nums[k] <= nums[i]: i = k
            k += 1
        # 前面没有满足条件的数,返回 False
        return False

源代码文件在 这里


目录
相关文章
Leetcode 516. Longest Palindromic Subsequence
找到一个字符串的最长回文子序列,这里注意回文子串和回文序列的区别。子序列不要求连续,子串(substring)是要求连续的。leetcode 5. Longest Palindromic Substring就是求连续子串的。
48 0
|
索引
LeetCode 392. Is Subsequence
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
102 0
LeetCode 392. Is Subsequence
LeetCode 376. Wiggle Subsequence
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。
98 0
LeetCode 376. Wiggle Subsequence
|
存储
LeetCode 329. Longest Increasing Path in a Matrix
给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
70 0
LeetCode 329. Longest Increasing Path in a Matrix
|
算法
LeetCode 300. Longest Increasing Subsequence
给定一个无序的整数数组,找到其中最长上升子序列的长度。
53 0
LeetCode 300. Longest Increasing Subsequence
LeetCode contest 183 5376. 非递增顺序的最小子序列 Minimum Subsequence in Non-Increasing Order
LeetCode contest 183 5376. 非递增顺序的最小子序列 Minimum Subsequence in Non-Increasing Order
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
114 2
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
16 1