zoukankan      html  css  js  c++  java
  • LeetCode -- Increasing Triplet Subsequence

    Question:

    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.

    Analysis:

     给出一个未排序的数组,判断该数组中是否存在一个长度为3的递增数组。

    要求算法时间复杂度为O(n),空间复杂度为O(1).

     思路:

    1. 最容易想到的思路就是3层for循环,先找出两个递增的序列,然后第三个数字比第二个数字的序号大,因此三层for循环可以很容易的解决,但是由于题目要求时间复杂度为O(n)。而这个思路的复杂度最好为O(1)前三个就符合条件,这样就返回true了,最差为O(n3)所有的都不符合条件,知道最后才会返回false。空间复杂度为0.不符合要求,但还是写上试了一下,没想到真的没有TLE!

    Answer:

    public class Solution {
        public boolean increasingTriplet(int[] nums) {
            if(nums == null || nums.length < 3)
                return false;
            for(int i=0; i<nums.length; i++) {
                for(int j=i+1; j<nums.length; j++) {
                    if(nums[j] > nums[i]) {
                        for(int k=j+1; k<nums.length; k++) {
                            if(nums[k] > nums[j])
                                return true;
                        }
                    }
                }
            }
            return false;
        }
    }

    2. 题目中要求时间复杂度为O(n),因此只能遍历数组一遍而不能有嵌套for循环。同时空间复杂度为O(1),所以我们使用两个变量,第一个变量保存最小的值,第二个变量保存次小的值,当下面的数组元素有一个比当前两个变量值都大的话,就会返回true。

    Answer:

    public class Solution {
        public boolean increasingTriplet(int[] nums) {
           if(nums == null || nums.length < 3)
                return false;
            int min = Integer.MAX_VALUE;
            int nextMin = Integer.MAX_VALUE;
            for(int i=0; i<nums.length; i++) {
                if(nums[i] <= min)
                    min = nums[i];
                else if(nums[i] <= nextMin)
                    nextMin = nums[i];
                else return true;
            }
            return false; 
        }
    }
  • 相关阅读:
    SqlMap入门
    本地文件上载到Docker容器
    CentOS7 安装Docker-ce
    windows10 子系统(WSL) 文件位置
    慕课网-安卓工程师初养成-5-1 编程练习
    慕课网-安卓工程师初养成-4-14 Java 循环语句之多重循环
    慕课网-安卓工程师初养成-4-13 练习题
    慕课网-安卓工程师初养成-4-12 Java循环跳转语句之 continue
    慕课网-安卓工程师初养成-4-11 Java循环跳转语句之 break
    慕课网-安卓工程师初养成-4-10 练习题
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5212667.html
Copyright © 2011-2022 走看看