最近发现两个题目,用栈解决非常精巧,特此分享:

leetcode456:

给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。

解法:

如果你从前往后去找的话,你需要

第一: 找到以后后面比前面大的数字

第二:找到一个位于这两个数字之间的数字,且位置在前两个位置之后

但是如果你从后往前找:

先找到ak<aj然后维护这个“最小值”尽可能大就好。一旦找到低于这个最小值的数就可以了。

我们要做大就是如何找到这个最小大最大值,画图可以看出来:

拿到B之后最小数值是A ->更新最小值,拿到c后最小值是B->更新最小值

D之后最小值是B->不更新最小值

E之后最小值是D更新最小值

总结就是,升则更新(pop)降则不更新,但是得记录(入栈)

大概过程

下面代码:

public 

下一个题更是巧妙,虽然是前面的拓展

看一个无序数组中是否存在这样的序列

使得 i< j < k 且 a[i]<a[j]<a[k]

方法:栈

结构双向队列

先扫找到一个后面的数比前面的数大的情况

我们要找到一个数,他到后面有一个比他大的数,并且他的前面有一个比他小的数。

方法:

双向队列。

从后王前入队列,初始化入队,

如果比队尾元素小,入队,如果size等于3则返回true,否则继续

如果比队头大则替换队头不替换队尾,

如果比队头小,但是比队尾大,则替换队尾,

public 

第三个是数组的妙用:实际和队列很像,只是由于替换这一步,队列不方便,所以就用数组表示了。

求一个序列中最长的递增子序列:

方法:数组比较。下面链接是原文

Longest Increasing Subsequence Size (N log N) - GeeksforGeeks​www.geeksforgeeks.org

比如序列 129045678

ans={1};

2>1 ans={1,2}

9>2 ans={1,2,9}

0<9->0<2->0<1 ans={0,2,9}

4<9->4>2->ans={0,2,4}

ans={0,2,4,5,6,7,8}

最后返回ans的size就好。

 public static int solve(int[] a){if(a.length==0)return 0;List<Integer> ans=new ArrayList<>();ans.add(a[0]);for(int i=1;i<a.length;i++){if(a[i]>ans.get(ans.size()-1)){ans.add(a[i]);}else{int loc=upper_bound(ans,a[i],0,ans.size()-1);//去重if(loc==0||(loc-1>=0&&ans.get(loc-1)!=a[i]))ans.set(loc,a[i]);}}return ans.size();}//find the locpublic static int upper_bound(List<Integer> ans,int target,int l,int r){while(l<r){int mid=l+(r-l)/2;if(ans.get(mid)>target){r=mid;}else{l=mid+1;}}return l;}

pta求阶乘序列前n项和_序列问题总结-超级巧妙相关推荐

  1. java求sum的前n项和_【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】...

    原题 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...

  2. C语言入门题-求阶乘序列前N项和

    7-1求阶乘序列前N项和 (15分) 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结果. 输入 ...

  3. 实验2-4-4 求阶乘序列前N项和 (C语言)

    实验2-4-4 求阶乘序列前N项和 (C语言) 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结 ...

  4. 2021/7/15 习题2-6 求阶乘序列前N项和

    习题2-6 求阶乘序列前N项和 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结果. 输入样例: ...

  5. PTA python 求分数序列前N项和

    本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+- 的前N项之和.注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子. 输入格式: 输入在一行中给出一个正整数N. ...

  6. pta 7-1 求N分之一序列前N项和 (15分)

    7-1 求N分之一序列前N项和 (15分) 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + - 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中按照&quo ...

  7. PTA——求奇数分之一序列前N项和

    求奇数分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中按照&quo ...

  8. PTA——求N分之一序列前N项和

    求N分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中按照" ...

  9. C语言简单算法之求交错序列前N项和,统计学生平均成绩与及格人数,求1到100的和,求奇数分之一序列前N项和,找出最小值,求n!,统计字符,最佳情侣身高差

    C语言简单算法之求交错序列前N项和,统计学生平均成绩与及格人数,求1到100的和,求奇数分之一序列前N项和,找出最小值,求n!,统计字符,最佳情侣身高差 [1] 1.题目三 求交错序列前N项和 1.实 ...

最新文章

  1. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
  2. 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C
  3. java bufferedimage颜色_java – BufferedImage意外地改变了颜色
  4. SQL Server 分区表的创建方法与管理
  5. Spark的Dataset操作
  6. Pacman主题下给Hexo增加简历类型
  7. LINUX下用YUM安装nginx出现No package nginx available.的问题与解决方案
  8. FTP(二)ftp部署与防火墙配置
  9. java+txt+词语+次数_Java练习2--读取txt文件统计考勤次数并写入一个txt文件中
  10. objective-c 中的关联介绍
  11. 直播盒子APP源码AlijuheCMS™开发手册之接口文档 for Android
  12. LabelImg安装教程(已亲测)
  13. Graphics.DrawLine 方法
  14. 项目管理表格模板/实用表格-需求
  15. 探索性测试:常见误区
  16. cba比赛比分预测_2019-20赛季CBA第5轮比赛预测!
  17. iphone开发笔记一 mac os 10.7.2安装与配置
  18. IOS唤起键盘,移动端页面放大
  19. win10内置录音机无法录制网页视频声音
  20. Windows 11可使AMD芯片性能下降15%

热门文章

  1. 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
  2. java类输出_java的输出类
  3. android 判断app处于前后台
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车租赁系统
  5. 基于JAVA+SSH+MYSQL的鲜花订购系统
  6. php70w mysql.x8664_LAMP环境的搭建(三)----PHP7的安装
  7. 第四十三篇 面向对象进阶2
  8. [BZOJ5329][Sdoi2018]战略游戏 圆方树+虚树
  9. 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III
  10. 自己写的_top、_parent以及对iframe和frameset的理解