码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 最长上升子序列


    最长上升子序列

    两道模板题,体验时间复杂度带来的快感以及方法不同的乐感!

    AcWing 895. 最长上升子序列

    AcWing 896. 最长上升子序列 II

    895. 最长上升子序列 - AcWing题库

    我们用a[i]表示原序列,f[i]是记录这个数的值是多少! 

    而后递推一下子就出来了

    对于不懂如何递推的话请看下图:

     

     可以自己模拟一下

    代码中的f[i] = 1是指我把f[ ]里里面的值全设为1

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. const int N = 1020;
    7. int a[N],f[N];
    8. int n;
    9. int main()
    10. {
    11. int ans = 1;
    12. cin>>n;
    13. for(int i = 1;i <= n;i++)cin>>a[i];
    14. for(int i = 1;i <= n;i++)
    15. {
    16. f[i] = 1;
    17. for(int j = 1;j < i;j++)
    18. if(a[i] > a[j])f[i] = max(f[i],f[j]+1);
    19. ans = max(ans,f[i]);
    20. }
    21. cout<
    22. return 0;
    23. }

      Ps:学东西要学透不是吗

    我们想想上面这个dp状态的时间复杂度为 O(n ^ 2)时间开销是不是很大?

    于是我们得想另外的办法降低时间复杂度对吧

    二分查找方法

    二分查找的时间复杂度是O(nlogn)所以对于数据大一点的来讲,这个方法不会出错!!

    例题请看:

    896. 最长上升子序列 II - AcWing题库

    数据范围变了一下而已 

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. const int N = 1e5+10;
    6. int n;
    7. int a[N],f[N];//f[]记录上升子序列,表示有序数列
    8. int len;//上升子序列的长度
    9. int find(int x)//二分查找第一个大于等于x的位置
    10. {
    11. int l = 1,r = len,mid;
    12. while(l <= r)
    13. {
    14. mid = (l+r)>>1;
    15. if(x > f[mid]) l = mid+1;
    16. else r = mid-1;
    17. }
    18. return l;
    19. }
    20. //也不是不可以用lower_bound( )
    21. int main()
    22. {
    23. cin>>n;
    24. int j;
    25. len = 1;
    26. for(int i = 1;i <= n;i++)cin>>a[i];
    27. f[1] = a[1];
    28. //考虑新加进来的a[i]
    29. for(int i = 2;i <= n;i++)
    30. {
    31. //大于则添加
    32. if(a[i] > f[len]) f[++len] = a[i];
    33. else//小于等于则替换
    34. {
    35. j = find(a[i]);
    36. f[j] = a[i];
    37. }
    38. }
    39. cout<
    40. return 0;
    41. }

  • 相关阅读:
    【基于pyAudioKits的Python音频信号处理(一)】pyAudioKits安装与API速查手册
    API安全的应用和分析
    L2W3作业 TensorFlow教程
    Docker部署Nginx-常用命令
    神经网络算法有哪些模型,神经网络模型数据处理
    vue使用Element-plus的Image预览时样式崩乱
    Visual Studio 2019安装boost 1.7.0库
    MySQL的概念和sql语句
    财政部《关于加强数据资产管理的指导意见》要点解析
    狂神说Go语言学习笔记(四)
  • 原文地址:https://blog.csdn.net/Demilly123/article/details/127795768
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号