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 思路:
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)的解法:
思路:
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-递增的三元子序列的更多相关文章
- LeetCode:递增的三元子序列【334】
		LeetCode:递增的三元子序列[334] 题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i ... 
- Leetcode 334.递增的三元子序列
		递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n- ... 
- 【LeetCode】334#递增的三元子序列
		题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, 使得 ... 
- Java实现 LeetCode 334 递增的三元子序列
		334. 递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ... 
- [LeetCode] Increasing Triplet Subsequence 递增的三元子序列
		Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ... 
- [Leetcode] 第334题 递增的三元子序列
		一.题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, ... 
- [Swift]LeetCode334. 递增的三元子序列 | Increasing Triplet Subsequence
		Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ... 
- 334 Increasing Triplet Subsequence 递增的三元子序列
		给定一个未排序的数组,请判断这个数组中是否存在长度为3的递增的子序列.正式的数学表达如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, ... 
- leetcode334 递增的三元子序列
		class Solution { public: bool increasingTriplet(vector<int>& nums) { //使用双指针: int len=nums ... 
- [LeetCode] 334. Increasing Triplet Subsequence 递增三元子序列
		Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ... 
随机推荐
- You have new mail in /var/spool/mail/root 解决烦琐提示的方法
			今天写定时任务时,出现奇怪的提示,有的时候每敲一下回车,也出现奇怪的提示 You have new mail in /var/spool/mail/root 阿西吧........表示很烦...究竟是 ... 
- python中判断实例可迭代地几种方式
			1. 利用 __iter__内建属性 if hasattr(obj, '__iter__') : print 'iterable' 这种方法不能检测字符串,如:hasattr('', '__iter_ ... 
- [python][easygui]使用enterbox()方法,简体字会显示成繁体字了
- Android APP的字体设置
			Android系统自带有对字体的设置,这些设置是对字体的显示方式的设置,比如加粗,倾斜,下划线,字号等,但是对于字体本身,比如设置为楷体,隶书等貌似没有.Android系统只有一种默认的,如果需要修改 ... 
- POJ 3415 Common Substrings 【长度不小于 K 的公共子串的个数】
			传送门:http://poj.org/problem?id=3415 题意:给定两个串,求长度不小于 k 的公共子串的个数 解题思路: 常用技巧,通过在中间添加特殊标记符连接两个串,把两个串的问题转换 ... 
- 2.2.3 TableLayout(表格布局)
			3.如何确定行数与列数 ①如果我们直接往TableLayout中添加组件的话,那么这个组件将占满一行!!! ②如果我们想一行上有多个组件的话,就要添加一个TableRow的容器,把组件都丢到里面! ③ ... 
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
			1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ... 
- Mysql 调优2个语句
			一.explain 语句 查看语句的执行计划 二.查看具体每一步耗时 .; .执行SQL .show profiles; 获取2执行SQL的query_id .show profile for que ... 
- 矿难让显卡压了那么多货咋办?NV如是说
			在苏州 GTC 开幕的几天前,英伟达刚刚遭遇了一次股价的腰斩. 近来加密货币的热度渐低,受到挖矿热潮照顾许多的英伟达「矿机」销量受到打击,甚至出现了严重的库存危机,加上近来刚刚发的 RTX20 系列显 ... 
- SQL 登录名 用户 角色
			参考博客:http://www.cnblogs.com/ChineseMoonGod/p/5860449.html,非常感谢博主的知识分享. 1.创建一个登录名,完全操作数据库权限,步骤为:创建登录名 ... 
