zoukankan      html  css  js  c++  java
  • LeetCode——递增的三元子序列

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

    A:

    1. 动态规划:dp装递增个数,遍历所有比当前值小的,取最大的递增个数+1
        public boolean increasingTriplet(int[] nums) {
            int[][] sortNum = new int[nums.length][2];
            for (int i = 0; i < nums.length; i++) {
                sortNum[i][0] = nums[i];
                sortNum[i][1] = i;
            }
            Arrays.sort(sortNum, Comparator.comparingInt(t -> t[0]));
            int[] dp = new int[nums.length];
            Arrays.fill(dp, 0);
            for (int i = 1; i < nums.length; i++) {
                for (int j = i - 1; j >= 0; j--) {
                    if (sortNum[i][0] > sortNum[j][0] && sortNum[i][1] > sortNum[j][1]) {
                        dp[i] = Math.max(dp[j] + 1, dp[i]);
                    }
                }
                if (dp[i] >= 2)//这里是放所有比当前值小的数值个数,所以为2
                    return true;
            }
            return false;
        }
    
    1. 双指针:两个指针分别放最小和次小。
        public boolean increasingTriplet(int[] nums) {
            if (nums.length <= 2)
                return false;
            int B = Integer.MAX_VALUE, A = Integer.MAX_VALUE;
            for (int n : nums) {
                if (n < A) //比最小的还小,最小的重置
                    A = n;
                else if (n > B) //比次小的大,找到递增三元
                    return true;
                else if (n < B && n > A)//比最小的大但比次小的小,重置次小
                    B = n;
            }
            return false;
        }
    
  • 相关阅读:
    希尔排序(java实现)
    直接插入排序(java实现)
    android AsyncTask使用限制
    android TranslateAnimation动画执行时的坐标获取。
    android内存管理机制
    android实现前置后置摄像头相互切换
    【转-整理】JavaWeb框架中,各层的解释和关系
    安卓系统上安装.net运行时 mono runtime
    你不知道的https工作原理
    HTTPS的误解(二)
  • 原文地址:https://www.cnblogs.com/xym4869/p/13462824.html
Copyright © 2011-2022 走看看