[leetcode] 334. Increasing Triplet Subsequence

原创 2016年02月27日 11:19:29

题目:
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.
Your algorithm should run in O(n) time complexity and O(1) space complexity.

Examples:
Given [1, 2, 3, 4, 5],
return true.

Given [5, 4, 3, 2, 1],
return false.
题意:
给你一个无序数组,找出其中是否有三个元素是递增的。这三个元素不一定连在一起。比如[1,2,3,4,5]就是的。而[5,4,3,2,1]就不是的。
思路:
对于这道题目,其实有点类似于我们之前做过的最长公共子序列的问题。最长公共子序列我们的思路是以当前第i个元素作为结尾的话,最长的子序列是多长。那么这里我们依旧可以借鉴这个思路,以当前元素为结尾的子序列的长度。
我们在遍历数组的时候保存两个值,第一个值代表的是长度为1的子序列对应的结束元素的大小,第二个值代表的是长度为2的子序列对应的结束元素的值得大小。那么在遍历过程中,如果这个元素比第二个元素还要大,那么就说面可以以当前元素作为长度为3的子序列的结尾,那么返回true。否则,如果这个元素比第二个元素小的话但比第一个元素大的话,我们更新第二个元素为这个值,否则如果当前元素比第一个元素小的话,那么更新第一个元素为这个元素的值。
以上。
代码如下:

class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        if(nums.size() < 3)return false;
        int num1 = INT_MAX;
        int num2 = INT_MAX;
        for(auto num:nums) {
            if(num < num1)num1 = num;
            else if(num > num1 && num < num2)num2 = num;
            else if(num1 != INT_MAX && num2 != INT_MAX && num > num2)return true;
        }
        return false;
    }
};

相关文章推荐

LeetCode#334. Increasing Triplet Subsequence

334. Increasing Triplet Subsequence Given an unsorted array return whether an increasing subseq...

LeetCode 334. Increasing Triplet Subsequence

前言写这篇文章的主要目的是为了熟悉一下MarkDown这个编辑方式。因为昨天有道云笔记发布对MarkDown的支持,后知后觉的我才发现了这个编辑器,因此打算写一篇小算法来练练手。这个算法也不算难,虽然...

leedCode 334 Increasing Triplet Subsequence

问题描述: Given an unsorted array return whether an increasing sub sequence of length 3 exists or not...

334. Increasing Triplet Subsequence

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

Increasing Triplet Subsequence

题目描述: Given an unsorted array return whether an increasing subsequence of length 3 exists or no...

LeetCode Longest Increasing Subsequence

题目: Given an unsorted array of integers, find the length of longest increasing subsequence. ...

leetcode 300. Longest Increasing Subsequence

Given an unsorted array of integers, find the length of longest increasing subsequence. For examp...

LeetCode 题解(Week6):300. Longest Increasing Subsequence

原题目Given an unsorted array of integers, find the length of longest increasing subsequence.For exampl...

LeetCode 300: Longest Increasing Subsequence

最长增加的子序列问题,归于动态规划问题。分析:从最后面的数往前去找。假设串为[10,9,2,5,3,7,101,18],我们从最后一个数18开始找,那么18这个数我们到底需不需要第一步就将它加入到最长...

Leetcode Algorithm 300. Longest Increasing Subsequence

Leetcode Algorithm 300. Longest Increasing Subsequence 给定一个乱序的整形数组,寻找其中最长严格上升子序列的最大长度...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode] 334. Increasing Triplet Subsequence
举报原因:
原因补充:

(最多只允许输入30个字)