原题
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
解法
定义两个变量: first, second表示递增序列的第一个和第二个变量. 遍历nums, 如果当前参数小于first, 更新first, 如果当前参数小于second, 更新second, 如果当前参数比first, second都大, 说明我们已找到一个匹配子序列.
Time: O(n)
Space: O(1)
代码
class Solution(object):
def increasingTriplet(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if len(nums) < 3:
return False
first = second = float('inf')
for n in nums:
if n <= first:
first = n
elif n <= second:
second = n
else:
return True
return False
本文介绍了一种高效算法,用于检测一个未排序数组中是否存在长度为3的递增子序列。该算法通过定义两个变量first和second来追踪可能的递增序列,并在O(n)的时间复杂度和O(1)的空间复杂度下完成任务。
5万+

被折叠的 条评论
为什么被折叠?



