给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
说明:

 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
 你算法的时间复杂度应该为 O(n2) 。

进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
 
思路:emmm,还没学动态规划,就看了一下官方思路写了一下,贪心和二分查找,二分查找主要用于优化速率。用一个dp数组保存最长子序列,从第一个数据开始,如果第二个数据比第一个数据小,如果大,就直接放到后边,然后第二个数据就顶替第一个数据,如果后边有数据,在dp数组中间,则这个数据就直接把刚好比它大的那个数据顶替掉,emmmm说不清楚。。。
直接上实例:
首先dp[0] = 10     然后发现nums[1]<dp[0],所以直接用nums[1]作为dp[0]重新开始,遇到nums[2]<dp[0],同理,遇到nums[3] = 5,放到后边,遇到nums[4] = 3,它大于2小于5,直接顶替5,以此类推
dp数组中的元素变化:
dp[numsSize] = 10
dp[numsSize] = 9
dp[numsSize] = 2
dp[numsSize] = 2  5
dp[numsSize] = 2  3
dp[numsSize] = 2  3  7
dp[numsSize] = 2  3  7  101
dp[numsSize] = 2  3  18  101
ok ok 返回长度即可。
int lengthOfLIS(int* nums, int numsSize)
{
if(numsSize == 0)
return 0;
int dp[numsSize];
int p = -1; dp[++p] = nums[0];
for(int i=0; i<numsSize; i++)
{
if(nums[i] > dp[p])
{
dp[++p] = nums[i];
}
else //进行二分查找法
{
int low = 0; //指向头部
int high = p; //指向尾部
int ptr = 0;
while(low <= high)
{
int mid = (high+low)/2; //指向中间
if(nums[i] > dp[mid])
{
ptr = mid;
low = mid+1;
}
else if(nums[i] <= dp[mid])
{
high = mid-1;
}
} if(dp[ptr] >= nums[i])
{
dp[ptr] = nums[i];
}
else
{
dp[ptr+1] = nums[i];
}
}
} return p+1;
}
 
 

(Good topic)贪心+二分查找:最长上升子序列(3.14 leetcode每日打卡)的更多相关文章

  1. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 /* 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 当然有可能两个数和超过p,那么an的值最优,每 ...

  2. Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找

    The link to problem:Problem - D - Codeforces   D. Range and Partition  time limit per test: 2 second ...

  3. Luogu 3402 最长公共子序列(二分,最长递增子序列)

    Luogu 3402 最长公共子序列(二分,最长递增子序列) Description 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子可教,就给他布置了一个课后作业: ...

  4. python实现查找最长公共子序列

    #!/usr/bin/python # -*- coding: UTF-8 -*- worlds = ['fosh','fort','vista','fish','hish','hello','ohd ...

  5. poj 1631 Bridging signals (二分||DP||最长递增子序列)

    Bridging signals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9234   Accepted: 5037 ...

  6. C++动态规划实现查找最长公共子序列

    问题描述: 给定两个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列.(给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共 ...

  7. BZOJ2796[Poi2012]Fibonacci Representation——贪心+二分查找

    题目描述 给出一个正整数x,问x最少能由多少个Fibonacci数加减算出. 例如1070=987+89-5-1,因此x=1070时答案是4. 输入 第一行一个正整数q (q<=10),表示有q ...

  8. hdu 4190 Distributing Ballot Boxes(贪心+二分查找)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4190 Distributing Ballot Boxes Time Limit: 20000/1000 ...

  9. 二分求最长上升子序列 二分LIS

    #include <iostream> #include <cstring> #define N 50010 using namespace std; int n; int n ...

  10. HDU 3308 线段树单点更新+区间查找最长连续子序列

    LCIS                                                              Time Limit: 6000/2000 MS (Java/Oth ...

随机推荐

  1. 自用 .net C# List集合和DataTable互转,可自定义表头

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...

  2. React: React-Router嵌套路由 exact问题

    说明 当使用嵌套路由时,不能在父路由中添加exact,因为要先匹配父路由才能匹配子路由 父路由 子路由 效果如下所示 参考链接 https://www.jianshu.com/p/8bc3251079 ...

  3. pycharm:插件translation 更新TTK失败

    解决方案 1.修改C:\Windows\System32\drivers\etc 下hosts文件, 添加 203.208.40.66 translate.google.com 203.208.40. ...

  4. Redis从入门到放弃(8):哨兵模式

    在前面的文章中介绍了Redis的主从复制,但主从复制存在一定的缺陷.如果Master节点宕机,因为不具备自动恢复功能,需要人工干预,那么在这个干预过程中Redis将不可用. 为了解决这一问题,Redi ...

  5. 数据分析师如何用SQL解决业务问题?

    本文来自问答. 提问:数据分析人员需要掌握sql到什么程度? 请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗? 正 ...

  6. 《UNIX 传奇:历史与回忆》读后感

    <UNIX 传奇:历史与回忆> 是 bwk(Brian W. Kernighan)2019 年的新作,回忆了 UNIX 在大半个世纪的风雨历程,是一本引人入胜的书籍.通过对 UNIX 操作 ...

  7. OpenApi(Swagger)快速转换成 TypeScript 代码 - STC

    在现代的 Web 开发中,使用 OpenAPI(以前称为 Swagger)规范来描述和定义 API 已经成为一种常见的做法.OpenAPI 规范提供了一种统一的方式来描述API的结构.请求和响应,使得 ...

  8. Docker使用教程及常用命令

    Docker是一个开源的应用容器引擎,允许开发者将应用以及依赖打包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows上.它非常适用于持续集成与持续交付(CI/CD). 1. 安装 ...

  9. windows访问linux分区文件

    正常情况下,linux可以访问windows系统的文件,而要想在windows下访问linux文件,需要借助第三方软件. 常用的有以下几款: 1.Linux Reader 2.Ext2 IFS 3.E ...

  10. (数据科学学习手札154)geopandas 0.14版本新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在前两天,Python生态中 ...