【错题集-编程题】dd 爱科学 1.0(最长上升子序列 - 贪心 + 二分)

牛客对应题目链接:dd爱科学1.0 (nowcoder.com)


一、分析题目

算法思路:要想改动最小,就应该在最长非下降子序列的基础上,对不是最长的部分进行更换。

因为这道题的数据范围比较大,所以排除动态规划(N^2),应该用贪心 + 二分(N*logN)求出最长非下降子序列的长度。

当考虑一个字符能否和前面的子序列组成非递增子序列时,不需要知道它是怎样的,只需要知道它的末尾字符是什么就行。所以,只需要将长度为 x 的所有子序列中,最小的末尾存起来。


二、代码

//值得学习的代码
#include <iostream>
#include <string>

using namespace std;

const int N = 1e6 + 10;
int n;
string s;

char dp[N]; // dp[i] 表⽰:⻓度为 i 的所有的⼦序列中,最⼩的末尾是多少
int ret;

int main()
{
    cin >> n >> s;
    for(int i = 0; i < n; i++)
    {
        char ch = s[i];
        // 找出 ch 应该放在哪个位置
        if(ret == 0 || ch >= dp[ret])
        {
            dp[++ret] = ch;
        }
        else
        {
            // ⼆分出 ch 应该放的位置
            int left = 1, right = ret;
            while(left < right)
            {
                int mid = (left + right) / 2;
                if(dp[mid] > ch) right = mid;
                else left = mid + 1;
            }
            dp[left] = ch;
        }
    }
 
    cout << n - ret << endl;
 
    return 0;
}

三、反思与改进

这道题目需要着重理解 dp 的含义,可以先自己模拟一下需要存储的数据的过程。

相关推荐

  1. 公共上升序列——DP

    2024-07-16 08:14:01       49 阅读
  2. 从一道板子了解LIS(上升序列)

    2024-07-16 08:14:01       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 08:14:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 08:14:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 08:14:01       62 阅读
  4. Python语言-面向对象

    2024-07-16 08:14:01       72 阅读

热门阅读

  1. Redis是什么

    2024-07-16 08:14:01       28 阅读
  2. 机器学习——机器学习概述

    2024-07-16 08:14:01       21 阅读
  3. 深入理解 Vue.js 的生命周期:从创建到销毁

    2024-07-16 08:14:01       27 阅读
  4. 2024.7.10 day 3 比赛总结

    2024-07-16 08:14:01       20 阅读
  5. 大模型 GPT 到 GPT-3.5 知识点总结

    2024-07-16 08:14:01       23 阅读
  6. Python 和 R两者的主要区别和优缺点对比

    2024-07-16 08:14:01       26 阅读
  7. k8s怎么配置secret呢?

    2024-07-16 08:14:01       24 阅读
  8. vue $refs

    2024-07-16 08:14:01       24 阅读
  9. 【php开发系统遇到CPU飙升的思考记录】

    2024-07-16 08:14:01       27 阅读
  10. AppML 案例:Products

    2024-07-16 08:14:01       24 阅读
  11. 深度学习--基础语法

    2024-07-16 08:14:01       20 阅读