一、题目描述

给定一个未排序的数组,判断这个数组中是否存在长度为 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

二、题目分析和代码实现

1、第一种方法——最直接的思路

1)采用动态规划的方法,dp[i]代表以nums[i]为结尾的递增子序列长度
2)dp[i]=max{dp[j]+1},j<i&&nums[j]<nums[i]
3)时间复杂度为n*n

 class Solution {
public:
bool increasingTriplet(vector<int>& nums) {
int n = nums.size();
if (n < )return false;
vector<int>dp(n, );
for (int i = ; i < n; ++i) {
for (int j = ; j < i; ++j) {
if (nums[j] < nums[i])
dp[i] = max(dp[i], dp[j] + );
}
if (dp[i] == )return true;
}
return false;
}
};

2、符合题目要求的方法——最佳思路,但是比较难想

1)用两个数字m1代表当前最小的数,m2代表遍历到现在第二小的数,m2的位置不一定要在m1之后
2)那么当发现一个数大于m2的数的时候,就直接返回true
3)时间复杂度为n,空间复杂度为常数

 class Solution {
public:
bool increasingTriplet(vector<int>& nums) {
int n = nums.size();
int m1 = INT_MAX, m2 = INT_MAX;
for (int i = ; i < n; ++i) {
if (nums[i] <= m1)m1 = nums[i];
else if (nums[i] <= m2)m2 = nums[i];//要注意等号,也就是遇到相等的也要向后移动
else return true;
}
return false;
}
};

3)另一种方法——思路很赞

1)Min[i]代表从0到i的最小值,Max[i]代表从i到n的最大值
2)如果nums[i]大于Min[i-1]并且小于Max[i+1],那么就返回真
3)时间复杂度为n,空间复杂度为n

 class Solution {
public:
bool increasingTriplet(vector<int>& nums) {
int n = nums.size();
if (n < )return false;
vector<int> Min(n), Max(n);
int i;
Min[] = nums[], Max[n - ] = nums[n - ];
for (i = ; i < n; ++i) {
Min[i] = min(Min[i - ], nums[i]);
Max[n - - i] = max(Max[n - i], nums[n - - i]);//注意下标
}
for (int i = ; i < n - ; ++i) {
if (nums[i] > Min[i - ] && nums[i] < Max[i + ])
return true;
}
return false;
}
};

[Leetcode] 第334题 递增的三元子序列的更多相关文章

  1. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列

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

  2. LeetCode:递增的三元子序列【334】

    LeetCode:递增的三元子序列[334] 题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k,  且满足 0 ≤ i ...

  3. Java实现 LeetCode 334 递增的三元子序列

    334. 递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ...

  4. Leetcode 334.递增的三元子序列

    递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k,  且满足 0 ≤ i < j < k ≤ n- ...

  5. 【LeetCode】334#递增的三元子序列

    题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, 使得 ...

  6. 【JavaScript】Leetcode每日一题-递增顺序搜索树

    [JavaScript]Leetcode每日一题-递增顺序搜索树 [题目描述] 给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没 ...

  7. 【python】Leetcode每日一题-最长公共子序列

    [python]Leetcode每日一题-最长公共子序列 [题目描述] 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . ...

  8. 334 Increasing Triplet Subsequence 递增的三元子序列

    给定一个未排序的数组,请判断这个数组中是否存在长度为3的递增的子序列.正式的数学表达如下:    如果存在这样的 i, j, k,  且满足 0 ≤ i < j < k ≤ n-1,    ...

  9. [Swift]LeetCode334. 递增的三元子序列 | Increasing Triplet Subsequence

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

随机推荐

  1. 记录一则clear重做日志文件的案例

    1.官方文档描述 2.故障报错信息 3.分析解决问题 1.官方文档描述 关于Clearing a Redo Log File的官方文档描述: A redo log file might become ...

  2. [转]Android中设置TextView的颜色setTextColor

    [转自]http://txlong-onz.iteye.com/blog/1249609 Android中设置TextView的颜色setTextColor android中设置TextView的颜色 ...

  3. Delphi - Indy 创建邮件自动发送服务

    服务器自动邮件线程 功能:此程序主要实现对Oracle数据库表tableName(存放需要发送邮件的相关信息)里面相关信息的邮件发送. 优点:开发人员可以直接再数据库后台对tableName表进行插入 ...

  4. 安卓开发开发规范手册V1.0

    安卓开发开发规范手册V1.0 之前发布过一份Web安全开发规范手册V1.0,看到收藏文章的读者挺多,发现整理这些文档还挺有意义. 最近周末抽了些时间把之前收集关于安卓安全开发的资料也整理了一下,整理出 ...

  5. 第6章 面向对象的程序设计 6.1 javascript对象

    ECMA-262 把对象定义为: “无序属性的集合, 其属性可以包含基本值. 对象或者函数. ” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到 ...

  6. J-Subarray_2019牛客暑期多校训练营(第二场)

    题意 有一个只由1,-1组成的数组,给出所有连续的1所在位置,求满足1的个数大于-1的个数的子区间的数量 题解 参考博客:https://www.cnblogs.com/Yinku/p/1122149 ...

  7. 牛客暑假多校第二场 K carpet

    题意:给你一个n*m的矩阵 ,每个位置都有一个字符并且都有一个值,现在需要找到一个p*q的子矩阵, 原来的矩阵可以由现在这个矩阵无限复制然后截取其中的一部分得到,并且要求 子矩阵里最大的值 * (p+ ...

  8. light 1205 - Palindromic Numbers(数位dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1205 题解:这题作为一个数位dp,是需要咚咚脑子想想的.这个数位dp方程可能不 ...

  9. hdu 5974 A Simple Math Problem(数学题)

    Problem Description Given two positive integers a and b,find suitable X and Y to meet the conditions ...

  10. cf--703--A-- Mishka and Game

    题目链接:http://codeforces.com/problemset/problem/703/A Mishka is a little polar bear. As known, little ...