博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九度 1533:最长上升子序列
阅读量:6918 次
发布时间:2019-06-27

本文共 1116 字,大约阅读时间需要 3 分钟。

题目描述:

给定一个整型数组, 求这个数组的最长严格递增子序列的长度。 譬如序列1 2 2 4 3 的最长严格递增子序列为1,2,4或1,2,3.他们的长度为3。

 

思路

1. 朴素求解 LIS, 没什么可说的

2. 又涉及到二分查找, 这次找的是大于等于 target 的最小值. = 时直接返回, 这就简单了. low > high 时, 返回 low, 因为上一轮比较, mid < target

 

 

代码

#include 
#include
using namespace std;int arr[100010];int record[100010];int search(int x, int low, int high) { if(low > high) { return low; } int mid = (low+high)>>1; if(record[mid] == x) { return mid; }else if(record[mid] > x) { return search(x, low, mid-1); }else{ return search(x, mid+1, high); }}int main() {// freopen("testcase.txt", "r", stdin); int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i ++) scanf("%d", &arr[i]); record[0] = arr[0]; int len = 1; for(int i = 1; i < n; i ++) { if(arr[i] > record[len-1]) { record[len] = arr[i]; len++; }else{ int insertPos = search(arr[i], 0, len-1); record[insertPos] = arr[i]; } } printf("%d\n", len); } return 0;}

 

转载地址:http://lsxcl.baihongyu.com/

你可能感兴趣的文章
Jquery 以及AngularJS 中 Get/Post 传参笔记
查看>>
Android入门篇(二)布局文件 容器②
查看>>
如何在Kubernetes中管理有状态应用
查看>>
一个基于react的图片裁剪组件
查看>>
PWA介绍及快速上手搭建一个PWA应用
查看>>
js数组用法
查看>>
Dubbo学习笔记
查看>>
基于 Redis驱动的 Laravel 事件广播
查看>>
NPM酷库040:jschardet,识别数据编码
查看>>
图书管理系统【用户、购买、订单模块、添加权限】
查看>>
JavaScript30秒, 从入门到放弃之Array(六)
查看>>
RabbitMQ的安装和使用
查看>>
WebAssembly起步
查看>>
基于CentOS搭建Hexo博客--设置NexT主题及个性化定制
查看>>
百度移动端首页秒开学习
查看>>
【304天】每日项目总结系列042(2017.12.06)
查看>>
数人云|给还在犹豫选择的你,微服务架构与整体架构的各自优势
查看>>
ES6之数值的扩展
查看>>
算法之路(1) -- two sum
查看>>
JavaScript Event loop 事件循环
查看>>