博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递增的三元子序列
阅读量:6901 次
发布时间:2019-06-27

本文共 808 字,大约阅读时间需要 2 分钟。

给定一个未排序的数组,请判断这个数组中是否存在长度为3的递增的子序列。

正式的数学表达如下:

如果存在这样的 
i, j, k,  且满足 0 ≤ 
i < 
j < 
k ≤ 
n-1,
使得 
arr[i] < 
arr[j] < 
arr[k] ,返回 true ; 否则返回 false 。

要求算法时间复杂度为O(n),空间复杂度为O(1) 。

示例:

输入 [1, 2, 3, 4, 5],
输出 true.

输入 [5, 4, 3, 2, 1],

输出 false.

致谢:

特别感谢  添加这道题并创建所有测试用例。

这条题一看就是用遍历就TLE不给你过的。。。然而我用了3层遍历之后竟然过了。。

下面是别人4ms的代码,看完之后恍然大悟,只要在遍历的时候不断更新前两个数的值,然后找到第三个数就行了。

第一次更新middle时,确定了一个递增的二元子序列,之后更新middle,会不断减小二元子序列的值,直到我们确定第三个数为止,以此递推下去,可以确定递增的n元子序列。

如果题目出的是什么100元子序列让我做,遍历100层。。。想想都可怕。。。

 

bool increasingTriplet(int* nums, int numsSize) {    int min = 2147483647;    int middle = 2147483647;    for(int i=0; i
middle){ return true; } if(nums[i]
min){ middle=nums[i]; } } return false;}

 

转载于:https://www.cnblogs.com/onlyandonly/p/9315205.html

你可能感兴趣的文章
Tomcat内存溢出解决办法
查看>>
Vue:v-model指令
查看>>
Software Engineering | Strategy pattern
查看>>
ios开发系列-准备工作
查看>>
Android Studio调试手机或者安装APK的时候出现install failed test only
查看>>
js闭包
查看>>
Xcode +SVN
查看>>
设置界面分析
查看>>
SQL中DateTime转换成Varchar样式
查看>>
java.util.AbstractList
查看>>
几个常见用于解决nginx负载均衡的session共享问题的办法
查看>>
setTimeOut、setInterval与clearInterval函数
查看>>
Appium原理及版本变化细节
查看>>
iphone ios 用xcode4.2开发 访问web service的功能
查看>>
Visual Studio 代码折叠快捷键(摘要)
查看>>
《2016ThoughtWorks技术雷达峰会----雷达新趋势》
查看>>
正则【备用】
查看>>
FeatureSelectors
查看>>
数据库防火墙DBShield安装
查看>>
sudo with no password
查看>>