牛客网 间单排序(LIS算法)
链接:https://ac.nowcoder.com/acm/contest/547/F
来源:牛客网题目描述
LXK有一个序列,从N~1,但是他不小心把序列打乱了,现在他想找你把这串序列复原。
他讨厌用传统的方式排序。所以他用他自己的方式进行复原。
他有K个先进先出的队列
对于某个数字,你可以选择将其放入任意队列之中(不能不放)。
每个队列中队首的数字可以在任意时间出队列。
利用这些队列,聪明的LXK就可以将序列复原回降序。
他想知道这些操作最少需要准备多少个队列?
输入描述:
一个数N(N<100000)表示数字的数目接下来一行 n个数字输出描述:
一个数k表示最少需要多少个队列才能满足要求示例1
输入
复制
5 1 2 3 4 5输出
复制
5示例2
输入
复制
7 1 2 5 7 3 4 6输出
复制
5
题解:因为队列是先进先出后进后出,按照最优的方法添加队列只需要把小的数放在大的数后面,所以我们只需要判断从开始到最后的单调递增的子序列有多长因为中间的数一定有与之对应的队列可以存放。
LIS:思想就是新生成一个数组 dp 用于存放单调递增的子序列,遍历原数组 arry 并判度 arry[i]>dp[len] ?如果是就将arry[i] 放入dp[++len] 中。否则在dp中找到第一个大于等于arry[i]的值并将其替换掉。具体如下:
当遍历到i=5时此时:
arry: 1 2 5 7 3 4 6
dp: 1 2 5 7
进行替换:
dp: 1 2 3 7
当遍历到i=6时
进行替换:
dp: 1 2 3 4
所以进行替换的目的是为了能将里面大的值替换掉,以便于小的值加入这样就可以增加其长度。因为替换的位置本身就会大于左边小于右边所以不会有什么影响。
注意:这样做只会得到单调递增子序列的长度并不会得到子序列的具体值。
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn=100000+1;
int n,arry[maxn],dp[maxn];
int Lis()
{clr(dp,0);int len=0;dp[len]=arry[0];for(int i=1;i<n;++i){if(arry[i]>dp[len]){dp[++len]=arry[i];}else{int p=lower_bound(dp,dp+len+1,arry[i])-dp;//使用二分查找减少时间复杂度dp[p]=arry[i];}}return len+1;
}
int main()
{cin>>n;for(int i=0;i<n;++i) {cin>>arry[i];}cout<<Lis()<<endl;return 0;
}
牛客网 间单排序(LIS算法)相关推荐
- 牛客网——B-栈和排序
链接:https://www.nowcoder.com/acm/contest/58/B 来源:牛客网 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数 ...
- Java算法:牛客网小米笔试真题算法Java版1-40题
题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...
- Java算法:牛客网京东笔试真题算法Java版1-24题
题号 题目 知识点 难度 通过率 JD1 年终奖 动态规划 简单 32.58%JD2 抛小球 数学模拟 简单 31.40%JD3 小东分苹果 动态规划模拟 中等 22.95%JD4 上台阶 递归动态规 ...
- 牛客网之字符串排序与DNA合成
题目描述: 输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的结果 . 输入描述: 一个字符串,其长度n<=20 输出描述: 输入样例可能有 ...
- 牛客网《直通BAT面试算法精讲课》优惠码
优惠码为:Arlk0H0 专属优惠购课链接:http://www.nowcoder.com/courses/1?coupon=Arlk0H0
- 牛客网算法错题笔记总结
最近在做一些牛客网的编程题和算法题:把一些比较生疏的知识点记下来,自己复习,也供大家参考: 1.给定节点数n后,求二叉树最多的结构 结构数量num = C(2n,n)/n+1;其中n是给定的节点数,比 ...
- 华为机试python编程题_牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 牛客网matlab怎么输入数据,从牛客上找的面经
转自:牛客网 作者:雲水謡 链接:https://www.nowcoder.com/discuss/262804 来源:牛客网 OPPO-计算机视觉算法(sp) 一面: 大约40分钟吧,主要聊项目,问 ...
- LeetCode 牛客网 C++ 算法 刷题必备基础知识
LeetCode 牛客网 C++ 算法 刷题必备基础知识 {ignore} 文章目录 LeetCode 牛客网 C++ 算法 刷题必备基础知识 {ignore} main综合模板 数组排序库 字符串库 ...
最新文章
- 升级版Mask R-CNN:PANet
- 1、Math类的常用方法
- Acwing第 12 场周赛【未完结】
- GitHub 上 6 款牛哄哄的后台模板
- HelloWorld程序的代码编写
- 淘系音视频技术的演进之路
- so easy(2019徐州icpc网络赛B)
- 【转】c#处理3种json数据的实例
- 如何在CentOS 7.x / RHEL 7.x上搭建Docker Private Registry(Docker私有仓库)
- php 使用curl模拟登录人人(校内)网
- Modelbuilder进阶教程
- 视频压缩工具及使用方法
- 最迷你的瑞典大学,如何建立起了影响全球的游戏发展体系
- 纯css变换图片颜色png
- win7 关闭计算机休眠,技术编辑教您win7下怎么关闭休眠
- We‘re sorry but XXX doesn‘t work properly without JavaScript enabled.
- spring boot 运行提示:Process finished with exit code 1
- 西安财经大学计算机考研科目,西安财经大学2020年硕士研究生考试复试科目与参考书目...
- 【UmiJS 3.x入门】
- GOJS入门三-如何设置节点间的连线