0
点赞
收藏
分享

微信扫一扫

【leetcode】递增的三元子序列


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


 

思路:

使用两个指针m1和m2,初始化为整型最大值,我们遍历数组,如果m1大于等于当前数字,则将当前数字赋给m1;如果m1小于当前数字且m2大于等于当前数字,那么将当前数字赋给m2,一旦m2被更新了,说明一定会有一个数小于m2,那么我们就成功的组成了一个长度为2的递增子序列,所以我们一旦遍历到比m2还大的数,我们直接返回ture。

class Solution {
public boolean increasingTriplet(int[] nums) {
        int m1 = Integer.MAX_VALUE;
        int m2 = Integer.MAX_VALUE;

        for(int n:nums) {
            if(m1>=n) {
                m1 = n;
            }else if(m2>=n) {
                m2 = n;
            }else {
                return true;
            }
        }
        
        return false;
    }
}

 

举报

相关推荐

0 条评论