【LeetCode】334#递增的三元子序列
题目描述
给定一个未排序的数组,判断这个数组中是否存在长度为 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
解题思路
1、暴力破解
使用三层循环,先找到二元上升序列,再在二元上升序列的基础上,找三元上升序列,时间复杂度为O(N^3)。
源代码
public boolean increasingTriplet (int[] nums) {
if (nums.length < 3) return false;
for (int i = 0; i < nums.length-2; i++) {
for (int j = i+1; j < nums.length - 1; 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、一次遍历法
维护两个常量:min和second_min,对数组进行遍历。
其中,min表示遍历到当前位置最小的元素,second_min表示从min的位置开始一直到当前位置的第二小元素(也就是比min大的元素中最小的那一个)。
确定这两个元素后,再在后续的元素中找有没有比second_min大的元素,如果有,就表示存在递增的三元子序列。
这样只需要遍历一次数组,时间复杂度为O(N)。
示意图

源代码
public boolean increasingTriplet (int[] nums) {
int min = Integer.MAX_VALUE;
int second_min = Integer.MAX_VALUE;
for (int num : nums) {
if (num<=min) min = num;
else if (num < second_min) second_min = num;
else if (num > second_min) return true;
}
return false;
}
心得体会
一次遍历法的巧妙就在于设置了两个变量(或者叫指针)来保存递增二元子序列,并实时更新,避免了许多重复的判断。
【LeetCode】334#递增的三元子序列的更多相关文章
- Java实现 LeetCode 334 递增的三元子序列
334. 递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ...
- Leetcode 334.递增的三元子序列
递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n- ...
- LeetCode:递增的三元子序列【334】
LeetCode:递增的三元子序列[334] 题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i ...
- [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, ...
- 334 Increasing Triplet Subsequence 递增的三元子序列
给定一个未排序的数组,请判断这个数组中是否存在长度为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 ...
- 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 ...
随机推荐
- 使用 RxJava 进行嵌套串行网络请求的一种方法
需求 有这样一个列表数据,它包含了商店+订单的信息,获取订单列表时,订单实体中会包含商店的 ID,而列表显示时需要商店的名称和 logo,这时候就需要进行嵌套串行网络请求了. 关键词 flatMap ...
- IDEA运行报错: Maven编译错误:不再支持源选项 5。请使用 6 或更高版本
这里 记录下 这个问题的解决方案: 1:修改maven settings.xml 中的数据 这里的版本要对应现在使用的jdk版本 2:检查idea 配置 图中2块区域要一致 检查这块地方对应了自己的j ...
- (三十)c#Winform自定义控件-文本框(三)
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- Python+Selenium - Web自动化测试(一):环境搭建
清单列表: Python 3x Selenium Chrome Pycharm 一.Python的安装: Python官网下载地址:https://www.python.org/ 1. 进入官网地址 ...
- Python获取系统交互式shell,跨平台
本文地址:https://www.cnblogs.com/M4K0/p/9044237.html 昨天搞了半天,终于把这两个环节打通了.后续可以进一步调用adb命令执行一些操作,细节说明已在代码中添加 ...
- maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...
项目结构是一个父项目,多个子项目目录: 例如: common --------------(父项目) fristDemo ------------(子项目) 如果在子项目中调用了父项目,而对(子 ...
- js 分享一个 时钟效果
<style> *{ margin: 0; padding: 0; } #outLine{ ...
- 【码上开心】Windows环境mysql数据库使用(一) 安装Mysql数据库
[下载MySql] https://dev.mysql.com/downloads/mysql/ 如下图,选择版本,本教程仅演示ZIP压缩包下载配置. 2.[解压到指定目录] 3.[配置环境变量] 4 ...
- GIt到本地小技巧
运行CMD自动到C盘,假如我要把项目clone D盘 ,就要去cd : D:\.. 乱七八糟的重复工作.烦死了. 下面是更加方便的技巧 直接在要GIt clone的路径打上CMD,然后回车.方便多了, ...
- python学习——python之禅
(一)python之禅: 在python中运行import this你会看到这样一段文字: The Zen of Python, by Tim Peters Beautiful is better ...