力扣贪心算法 334. 递增的三元子序列 ——java代码,较简短

自取题目:https://leetcode.cn/problems/increasing-triplet-subsequence/

原题目

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

示例

输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意

大致思路

  • 该题意最后描述出递增子序列,这意味着三个数字在原数组中可以不连续
  • 三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k],下标依次增长,就是按照顺序遍历数组。
  • 题目示意我们要找出三个递增数组,可以将此问题化为两个部分:
  •   		1.找到两个递增的数字
      		2.找到一个比这两个都大的数字,找得到就返回ture,反之则返回false
    

变量定义

  • first 定义最小的数字,second 定义子列中第二大的数字,为了减少代码量,可以先定义first为数组第一个数字,second定义成int中最大的数字,在接下来将会替换成目标数字
  • 当发现当前数字大于second的时候返回ture

代码实现

public static boolean increasingTriplet(int[] nums) {
        if (nums.length <3) //减少运行时间
            return false;
        int first = nums[0],second = Integer.MAX_VALUE;
        for (int i = 1; i < nums.length; i++) {
            int num = nums[i];  
            if (num > second)
                return true;
            else if (num <= first)  
                first = num;   //保持first为最小的数字
            else second = num;   //遇到比first大的就定义成second
        }
        return false;
    }

测试图

在这里插入图片描述
闲话时间
最开始按照基本逻辑写了个简单的代码,顺畅到吃惊,结果测试的时候发现一个测试用例好像是50万1和2,一下子就超时了【吃惊】。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值