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

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

/*
22.1.12
判断一个数组是否具有三升序列
1.该算法的核心思想就是如果一个数组存在三升序列,那意味着其中必然有一个元素,它左边所以元素的最小值小于该元素,右边所有元素的最大值大于该元素。
2.所有难点在于如何求每个元素的左最小值和右最大值,通过动态规划的手段可以快速构造。 左最小值:比较前一个元素本身和它的左最小值,那个小,来作为当前元素的左最小值,右最大值也类似。
*/
#include
#include
#include
#include
using namespace std;
bool increasingTriplet(vector&nums);
int main()
{
vectora={4,5,2147483647,1,2};
cout<<increasingTriplet(a);
return 0;
}
bool increasingTriplet(vector&nums)
{
int count=nums.size();
vectorleft(count);
vectorright(count);
left[0]=nums[0];
right[count-1]=right[count-1];
for(int i=1;i<count;i++)
{
left[i]=left[i-1]>nums[i-1]?nums[i-1]:left[i-1];
right[count-1-i]=right[count-i]<nums[count-i]?nums[count-i]:right[count-i];
}
for(int i=1;i<count;i++)
{
if(nums[i]>left[i]&&nums[i]<right[i])
return true;
}
return false;
}

/*
22.1.12_2
1.刚开始打算用栈来做,但是该算法与栈有明显的区别,显然栈是无法完成该算法的
2.栈当有比站内元素小的元素入栈时,先把比该元素大的全部弹出,当栈的深度大于三即可,但是三升序列的头不一定是最小元素,很可能是找不到符合条件的,问题就在于当出现比栈底更小的元素时,会把栈都清空。
3.该算法巧妙的利用了三个变量来分别表示三升序列的每个元素,通过寻找比第二个元素大的第三元素来判断,但遇见比第一个元素还小的元素时,它会先假设该最小元素是头,但是第二个元素依然是在该元素的前面的,如果后面有元素大于第二个元素依然满足条件,因为现在的头只是假设真正的头还是在第二个元素之前的。
4.只有后面的元素小于第二个元素并且大于假设的头时,则该元素会成为第二个元素,假设的头成为真正的头。这时后面的元素只有两种情况一是小于第二个元素,那么这更说明前一个头和第二个元素也不会满足情况,如果大于那当前的情况即满足条件。
5.注意一开始第二个元素要设的足够大(大于数组中所有元素才行)
*/
#include
#include
#include
using namespace std;
bool increasingTriplet(vector&nums);
int main()
{
vectora={2,4,-2,-3};
cout<<increasingTriplet(a);
return 0;
}
bool increasingTriplet(vector&nums)
{
int count=nums.size();
int first=nums[0],sec=2147483647;
for(int i=0;i<count;i++)
{
if(nums[i]>sec)
return true;
if(first<nums[i]&&nums[i]<sec)
sec=nums[i];
if(nums[i]<first)
first=nums[i];
}
return false;
}

22.1.2是否存在三升序列相关推荐

  1. 蓝桥杯每日一题(22):三升序列(python)

    Topic [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如 ...

  2. C/C++蓝桥杯三升序列

    本题答案可能是错的,我算出的是180414,和很多博主的答案不一样,我也不太懂哪里有问题,大家可以探讨一下 题目描述 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行 ...

  3. [蓝桥杯]三升序列(Python实现)

    题目: 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 YQ ...

  4. 2019第十届蓝桥杯A组决赛(国赛)A题(三升序列)

    2019第十届蓝桥杯A组决赛(国赛)A题(三升序列) 输入: VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNK ...

  5. [蓝桥杯] 三升序列 python解法

    [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...

  6. 蓝桥杯第十届国赛C++研究生组 试题 A: 三升序列

    试题 A: 三升序列 [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个 字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向 右看.或者从上向下看是 ...

  7. 三升序列(蓝桥杯真题)——python

    题目如下: 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...

  8. 三升序列 和递增序列

    递增序列 对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个 字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这两个字母从左向 右看.或者从上向下看是递增的. 例如,如下矩阵中 ...

  9. 2019\National _C_C++_A\试题 A: 三升序列

    [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...

最新文章

  1. BZOJ3670 [Noi2014]动物园 【KMP计数】
  2. CTFshow 反序列化 web270
  3. 目前计算机科学研究的最前沿的课题之一,04大学计算机础课程试卷.doc
  4. 构造函数、原型、继承原来这么简单?来吧,深入浅出
  5. Spring 注入集合
  6. FPGA(7)--有限状态机--交通灯
  7. TensorFolw 报错
  8. SubSonic框架使用图解
  9. C++ Primer 第五版读书笔记
  10. 闭关修炼 5 个月的源码,终于拿到蚂蚁 Offer!
  11. FISCO BCOS java sdk 组装交易的代码位置
  12. Kettle下载安装使用
  13. 第5章第24节:如何在幻灯片中播放视频文件 [PowerPoint精美幻灯片实战教程]
  14. android 播放pcm的软件,应用AudioTrack播放PCM音频数据(android)
  15. PowerApps 中的 Filter、Search 和 LookUp 函数
  16. 如果忘记了学信网手机号可以试着这样找回
  17. LOJ10066 新的开始
  18. uni-app上传安卓应用市场的坑
  19. 新浪微博技术架构分析
  20. 统计试验设计的常用模型

热门文章

  1. matplotlib 不显示图像或者图像只能在弹出层显示
  2. 这套表情包,居然开源了!!
  3. 腾讯云服务器性能评测:8核 16G 18M 配置
  4. 手把手系列之三十——手把手教你做番薯小煎饼
  5. 机器学习常用「微积分」知识速查手册
  6. a19_Python文件I/O---学习笔记
  7. 微信公众号扫码授权登录思路
  8. PS打不开php,ps打不开未响应怎么办
  9. 九招使用 Telegram必学,使用Telegram 必看实用功能
  10. 活动报名 | 清华大学交叉信息研究院高阳:视觉机器人学习