pta求阶乘序列前n项和_序列问题总结-超级巧妙
最近发现两个题目,用栈解决非常精巧,特此分享:
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) - GeeksforGeekswww.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项和_序列问题总结-超级巧妙相关推荐
- 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 ...
- C语言入门题-求阶乘序列前N项和
7-1求阶乘序列前N项和 (15分) 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结果. 输入 ...
- 实验2-4-4 求阶乘序列前N项和 (C语言)
实验2-4-4 求阶乘序列前N项和 (C语言) 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结 ...
- 2021/7/15 习题2-6 求阶乘序列前N项和
习题2-6 求阶乘序列前N项和 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结果. 输入样例: ...
- PTA python 求分数序列前N项和
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+- 的前N项之和.注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子. 输入格式: 输入在一行中给出一个正整数N. ...
- pta 7-1 求N分之一序列前N项和 (15分)
7-1 求N分之一序列前N项和 (15分) 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + - 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中按照&quo ...
- PTA——求奇数分之一序列前N项和
求奇数分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中按照&quo ...
- PTA——求N分之一序列前N项和
求N分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中按照" ...
- C语言简单算法之求交错序列前N项和,统计学生平均成绩与及格人数,求1到100的和,求奇数分之一序列前N项和,找出最小值,求n!,统计字符,最佳情侣身高差
C语言简单算法之求交错序列前N项和,统计学生平均成绩与及格人数,求1到100的和,求奇数分之一序列前N项和,找出最小值,求n!,统计字符,最佳情侣身高差 [1] 1.题目三 求交错序列前N项和 1.实 ...
最新文章
- Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
- 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C
- java bufferedimage颜色_java – BufferedImage意外地改变了颜色
- SQL Server 分区表的创建方法与管理
- Spark的Dataset操作
- Pacman主题下给Hexo增加简历类型
- LINUX下用YUM安装nginx出现No package nginx available.的问题与解决方案
- FTP(二)ftp部署与防火墙配置
- java+txt+词语+次数_Java练习2--读取txt文件统计考勤次数并写入一个txt文件中
- objective-c 中的关联介绍
- 直播盒子APP源码AlijuheCMS™开发手册之接口文档 for Android
- LabelImg安装教程(已亲测)
- Graphics.DrawLine 方法
- 项目管理表格模板/实用表格-需求
- 探索性测试:常见误区
- cba比赛比分预测_2019-20赛季CBA第5轮比赛预测!
- iphone开发笔记一 mac os 10.7.2安装与配置
- IOS唤起键盘,移动端页面放大
- win10内置录音机无法录制网页视频声音
- Windows 11可使AMD芯片性能下降15%
热门文章
- 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
- java类输出_java的输出类
- android 判断app处于前后台
- 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车租赁系统
- 基于JAVA+SSH+MYSQL的鲜花订购系统
- php70w mysql.x8664_LAMP环境的搭建(三)----PHP7的安装
- 第四十三篇 面向对象进阶2
- [BZOJ5329][Sdoi2018]战略游戏 圆方树+虚树
- 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III
- 自己写的_top、_parent以及对iframe和frameset的理解