22.1.2是否存在三升序列
给你一个整数数组 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是否存在三升序列相关推荐
- 蓝桥杯每日一题(22):三升序列(python)
Topic [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如 ...
- C/C++蓝桥杯三升序列
本题答案可能是错的,我算出的是180414,和很多博主的答案不一样,我也不太懂哪里有问题,大家可以探讨一下 题目描述 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行 ...
- [蓝桥杯]三升序列(Python实现)
题目: 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 YQ ...
- 2019第十届蓝桥杯A组决赛(国赛)A题(三升序列)
2019第十届蓝桥杯A组决赛(国赛)A题(三升序列) 输入: VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNK ...
- [蓝桥杯] 三升序列 python解法
[问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...
- 蓝桥杯第十届国赛C++研究生组 试题 A: 三升序列
试题 A: 三升序列 [问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个 字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向 右看.或者从上向下看是 ...
- 三升序列(蓝桥杯真题)——python
题目如下: 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...
- 三升序列 和递增序列
递增序列 对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个 字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这两个字母从左向 右看.或者从上向下看是递增的. 例如,如下矩阵中 ...
- 2019\National _C_C++_A\试题 A: 三升序列
[问题描述] 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...
最新文章
- BZOJ3670 [Noi2014]动物园 【KMP计数】
- CTFshow 反序列化 web270
- 目前计算机科学研究的最前沿的课题之一,04大学计算机础课程试卷.doc
- 构造函数、原型、继承原来这么简单?来吧,深入浅出
- Spring 注入集合
- FPGA(7)--有限状态机--交通灯
- TensorFolw 报错
- SubSonic框架使用图解
- C++ Primer 第五版读书笔记
- 闭关修炼 5 个月的源码,终于拿到蚂蚁 Offer!
- FISCO BCOS java sdk 组装交易的代码位置
- Kettle下载安装使用
- 第5章第24节:如何在幻灯片中播放视频文件 [PowerPoint精美幻灯片实战教程]
- android 播放pcm的软件,应用AudioTrack播放PCM音频数据(android)
- PowerApps 中的 Filter、Search 和 LookUp 函数
- 如果忘记了学信网手机号可以试着这样找回
- LOJ10066 新的开始
- uni-app上传安卓应用市场的坑
- 新浪微博技术架构分析
- 统计试验设计的常用模型