码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法----递增的三元子序列


    题目

    给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。

    如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

    示例 1:

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

    输入:nums = [5,4,3,2,1]
    输出:false
    解释:不存在满足题意的三元组
    示例 3:

    输入:nums = [2,1,5,0,4,6]
    输出:true
    解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6

    提示:

    1 <= nums.length <= 5 * 105
    -231 <= nums[i] <= 231 - 1

    解决方法

    left 数组表示当前位置左侧的最小值,right 数组表示当前位置右侧的最大值,
    只要满足任何位置,当前位置的值大于左侧的最小值,小于 右侧的最大值,就满足条件了

        fun increasingTriplet(nums: IntArray): Boolean {
            val size = nums.size
            if (size < 3) {
                return false
            }
            val left = IntArray(size) { Int.MAX_VALUE }
            val right = IntArray(size) { Int.MIN_VALUE }
            left[0] = nums[0]
            right[size - 1] = nums[size - 1]
            //不用考虑等于的情况
            for (i in 1 until size - 1) {
                left[i] = nums[i].coerceAtMost(left[i - 1])
            }
    
            for (i in size - 2 downTo 1) {
                right[i] = nums[i].coerceAtLeast(right[i + 1])
            }
    
            for (i in 1 until size - 1) {
                if (nums[i] > left[i] && nums[i] < right[i]) {
                    return true
                }
            }
            return false
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    两个变量 first second,0(n) 复杂度解决

        fun increasingTriplet2(nums: IntArray): Boolean {
            //保存两个变量
            val size = nums.size
            if (size < 3) {
                return false
            }
            var first = nums[0]
            var second = Int.MAX_VALUE
            for (i in 1 until size) {
                if (nums[i] > second) {
                    return true
                } else if (nums[i] > first) {
                    second = nums[i]
                } else {
                    first = nums[i]
                }
            }
            return false
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    总结

    再简单再复杂也要手敲一遍,否则有些细节,你终究是抓不住的。

    人生,感觉还可以再搏一搏

  • 相关阅读:
    Java 动态代理原理图解 (附:2种实现方式详细对比)
    四化智造MES(WEB)与金蝶云星空对接集成原材料/标准件采购查询(待采购)连通采购订单新增(原材料采购-采购订单(变更)-TEST)
    力扣:123.买卖股票的最佳时机III
    LINUX -SQL笔记(自学用)
    【python】通用的json_diff方法
    java1.8新特性入门级讲解
    java计算机毕业设计教学成果管理平台录像演示源代码+数据库+系统+lw文档
    软件测试的就业前景到底怎么样?
    在线工具推荐!能在线解决的问题,何必下载软件呢?
    百度ueditor富文本插件插入视频问题汇总【必须收藏】
  • 原文地址:https://blog.csdn.net/u013270444/article/details/134052997
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号