Leetcode解题报告——334. Increasing Triplet Subsequence

题目要求:
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.

题目大意:
判断给定数组中是否含有递增序列,并且判断该序列的元素数是否大于2

解题思路:
一般遇到这种求增长序列问题,博主经常喜欢使用动态规划求解,但这道题由于时间复杂度闲置为 O(n) ,故此我们必须选择另一种解法。
我们维护两个变量 first 和 second, 这只是用来表示前面是否存在2个增长序列,与 first 和 second 对应于 原数组中的顺序没有关系

代码如下:

 public static boolean increasingTriplet(int[] nums) {
        int first = Integer.MAX_VALUE,second = Integer.MAX_VALUE;
        for (int num : nums) {
            if(num < first) first = num;
            else if (num < second) second = num;
            else return true;
        }
        return false;
    }

 /**
     * nums [ 3,6,1,4,8 ]
     *
     * 循环过程:
     * first    second
     *   3        MAX_VALUE
     *   3        6
     *   1        6
     *   ......
     *   //虽然在原数组中 1 在 6 的后面 ,
     *   但它依旧是个增长序列,只要 second 不等于 MAX_VALUE
     *   则必然存在一个增长序列
     *   所以 first 和 second 只是一个增长序列,和元素位置无关
     */

你可能感兴趣的:(Leetcode解题报告——334. Increasing Triplet Subsequence)