博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[算法]-Longest Increasing Subsequence
阅读量:6003 次
发布时间:2019-06-20

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

看微软笔试题遇到的。

Longest Increasing Subsequence(LIS) means a sequence containing some elements in another sequence by the same order, and the values of elements keeps increasing.For example, LIS of {2,1,4,2,3,7,4,6} is {1,2,3,4,6}, and its LIS length is 5.Considering an array with N elements , what is the lowest time and space complexity to get the length of LIS?

算法一:动态规划

#include 
#include
using namespace std;#define SIZE 8 int s[SIZE]= {2,1,4,2,3,7,4,6}; // sequenceint length[SIZE]; // 第 x 格的值為 s[0...x] 的 LIS 長度void LIS(){ // 初始化。每一個數字本身就是長度為一的 LIS。 for (int i=0; i
算法二:
#include 
#include
using namespace std;#define SIZE 8 int s[SIZE]= {2,1,4,2,3,7,4,6}; // sequenceint b[SIZE];// num为要查找的数,k是范围上限// 二分查找大于num的最小值,并返回其位置int bSearch(int num, int k) { int low=1, high=k; while(low<=high) { int mid=(low+high)/2; if(num>=b[mid]) low=mid+1; else high=mid-1; } return low; }; void LIS(){ int low = 1, high = SIZE; int k = 1; b[1] = s[1]; for(int i=2; i<=SIZE; ++i) { if(s[i]>=b[k]) b[++k] = s[i]; else { int pos = bSearch(s[i], k); b[pos] = s[i]; } } printf("%d", k); }int main(void) { LIS(); system("pause"); return 0; }

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

你可能感兴趣的文章
“萌物”驾到!波士顿动力公布新机器人SpotMini
查看>>
Android 渗透测试学习手册 第六章 玩转 SQLite
查看>>
懒人也能变美,AR试妆会让你剁手到停不下来吗?
查看>>
Subquery Optimizations Map
查看>>
消息推送标准协议:MQTT
查看>>
珍爱生命,请定期重启手机
查看>>
阅面携手英特尔重磅发布“繁星”,计算机视觉迈入AI芯片新纪元!
查看>>
【得得专栏】方军:谈论区块链时,“数字资产”这个词可能是误导
查看>>
不仅仅是送货无人机,亚马逊还要用无人驾驶包揽地面
查看>>
朗锐智科发布PCIe-8604 USB3.0图像采集卡
查看>>
3星|《信号》:全球经济的坏消息
查看>>
java public,default,protected,private区别
查看>>
3d中的坐标系的概念
查看>>
大咖分享 | 人机交互技术需要什么样的创新?
查看>>
全网智联 通达全球
查看>>
struct 结构体解析(原)
查看>>
boost asio resolver
查看>>
对象存储oss集成到thinkPHP,将图片上传到oss里面
查看>>
分享在winform下实现左右布局多窗口界面-续篇
查看>>
在Linux环境下mysql的root密码忘记解决方法
查看>>