美文网首页
Leetcode解题报告——334. Increasing Tr

Leetcode解题报告——334. Increasing Tr

作者: Jarryd | 来源:发表于2018-01-08 17:28 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/gupbnxtx.html