mxllcf

导航

leetcode334题 递增的三元子序列

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false

 

我的思想:

遍历两次,第一次遍历,从倒数第一个开始,往左遍历,如果找到了一个比我小的,就给这个数组赋值为true。否则就替换成这个比我大的,继续遍历。

第二次遍历,从第一个开始,往右遍历,如果找到了一个比我大的,并且该位置数组赋值为true,则输出true。否则就替换成这个比我小的。

 

 

class Solution {
    public boolean increasingTriplet(int[] nums) {
        if (nums == null || nums.length < 3) {
            return false;
        }

        boolean [] have = new boolean[nums.length];
        for (int m = nums[nums.length - 1], i = nums.length - 2; i >=0; --i) {
            if (m >nums[i]){
                have[i] = true;
            } else {
                m = nums[i];    
            }                         
        }

        for (int m = nums[0],i = 1; i < nums.length; ++i) {
            if (m < nums[i]){
                if (have[i]) return true;
            } else {
                m = nums[i];
            }
        }
        return false;
    }
}

 

posted on 2021-12-29 22:14  mxllcf  阅读(25)  评论(0编辑  收藏  举报