给定一个未排序的数组,判断这个数组中是否存在长度为 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 思路:
实际参考思路是:先找到一个长度为2的递增序列,然后继续遍历找到一个比数组最大值更大的数字。 因此该过程中需要记录数组。   采用分别处理,如果有一个长度为2的递增序列,那么记录数组下标为true,同时更新最大值。  这种算法的空间复杂度是o(n)。   友情提示:一定是取得最大值和最小值去比较,只要有比最小值小,比最大值大的数,那么记录下来的数组就为true。
class Solution {
public boolean increasingTriplet(int[] nums) {
if(nums.length<3)return false;
int smallest=nums[0];
boolean uper[]=new boolean[nums.length]; //利用数组记录长度为2的递增序列
for(int i=1;i<nums.length;i++){
if(nums[i]>smallest){
uper[i]=true;
}
smallest=Math.min(smallest,nums[i]);
}
int biggest=nums[nums.length-1];
//再次遍历数组,此次从最后开始,不断更新最大值,只要满足长度为2的递增序列,同时当前遍历数字小于最大值,则返回true
for(int i=nums.length-2;i>=0;i--){ //遍历是从倒数第二个数字开始的
if(nums[i]<biggest){
if(uper[i]==true)return true;
}
biggest=Math.max(nums[i],biggest);
}
return false;
}
}

空间复杂度O(1)的解法:

思路:

首先设置m1,m2为Int最大值,然后对遍历的每一个数进行比较,m1记录数组中的最小值,m2记录比m1大的数字。  继续遍历,只要找到一个比m1,m2都更大的数字,那么返回true。
以及注意这个if语句的划分范围。
class Solution {
public boolean increasingTriplet(int[] nums) {
if(nums.length<3)return false;
int m1=Integer.MAX_VALUE,m2=Integer.MAX_VALUE;
for(int i=0;i<nums.length;i++){
//这里使用的是if (){}else if() { } else 语句,判断的逻辑是一开始是更新m1,m2,遍历两个数字时m1<m2(之后更新m1,m2的过程中不保证m1<m2),返回比m1,m2更大的数
if(m1>=nums[i])m1=nums[i];
else if(m2>=nums[i])m2=nums[i];
else return true;
}
return false;
}
}

在更新过程中也可使用此种逻辑表示:

 if(nums[i]<=m1){
m1 =nums[i];
continue;
}
if(m1<nums[i]&&nums[i]<=m2){
m2 =nums[i];
continue;
}
if(nums[i]>m2){
return true;

总结:这道题的难点在于if else if语句的逻辑掌握和难以想到用两个数字代替一个递增序列的情况。

leetcode-递增的三元子序列的更多相关文章

  1. LeetCode:递增的三元子序列【334】

    LeetCode:递增的三元子序列[334] 题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k,  且满足 0 ≤ i ...

  2. Leetcode 334.递增的三元子序列

    递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k,  且满足 0 ≤ i < j < k ≤ n- ...

  3. 【LeetCode】334#递增的三元子序列

    题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, 使得 ...

  4. Java实现 LeetCode 334 递增的三元子序列

    334. 递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ...

  5. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  6. [Leetcode] 第334题 递增的三元子序列

    一.题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k,  且满足 0 ≤ i < j < k ≤ n-1, ...

  7. [Swift]LeetCode334. 递增的三元子序列 | Increasing Triplet Subsequence

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  8. 334 Increasing Triplet Subsequence 递增的三元子序列

    给定一个未排序的数组,请判断这个数组中是否存在长度为3的递增的子序列.正式的数学表达如下:    如果存在这样的 i, j, k,  且满足 0 ≤ i < j < k ≤ n-1,    ...

  9. leetcode334 递增的三元子序列

    class Solution { public: bool increasingTriplet(vector<int>& nums) { //使用双指针: int len=nums ...

  10. [LeetCode] 334. Increasing Triplet Subsequence 递增三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

随机推荐

  1. Linux 中查看 DNS 与 配置

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. 查看dns 可 ...

  2. scp机器间远程拷贝

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. 使用语法:scp  [参数 ...

  3. AngularJS 中<a> 超链接标签不起作用?

    开始时遇到个问题,单页应用<a>元素链接点击就是不跳转页面,使用超链接标签<a href='group'>click</a> 不起作用. 解决方法: 如果你不巧配置 ...

  4. Hive 整合Hbase

    摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询.同时也可以将hive表中的数据映射到Hbase中.     应用 ...

  5. 实现统计 android手机 CPU使用率

    # -*- coding:utf-8 -*- ''' Created on Sep 10, 2018 @author: SaShuangYiBing ''' import subprocess imp ...

  6. 四、 git关联远程仓库及推送

    接之前笔记,在 github上建立与本地同名的仓库 demo 关联远程仓库 1. https 模式     远程库的名字就是origin,这是Git默认的叫法 git remote add origi ...

  7. NOIP模板总结

    NOIP模板总结 进考场先打一份缺省源: # include <cstdio> # include <iostream> # include <cstring> # ...

  8. [题目] Luogu P1312 Mayan游戏

    题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...

  9. Unicode,GBK,GB2312,UTF-8概念基础(转载)

    第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础本部分采用重用,转载一篇文章来完成这部分的目标.来源:holen'blog   对字符编码与Unicode,IS ...

  10. 常用lua代码块

    1.读取请求体中参数 local request_method = ngx.var.request_method local args --获取参数的值 if "GET" == r ...