LeetCode 1713. 得到子序列的最少操作次数(最长上升子序DP nlogn)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。

每一次操作中,你可以在 arr 的任意位置插入任一整数。
比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。
你可以在数组最开始或最后面添加整数。

请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。

一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相对顺序得到的数组。

比方说,[2,7,4] 是 [4,2,3,7,2,1,4] 的子序列(加粗元素),但 [2,4,2] 不是子序列。

示例 1:
输入:target = [5,1,3], arr = [9,4,2,3,4]
输出:2
解释:你可以添加 51 ,使得 arr 变为 [5,9,4,1,2,3,4] ,target 为 arr 的子序列。示例 2:
输入:target = [6,4,8,1,3,2], arr = [4,7,6,2,3,8,6,1]
输出:3提示:
1 <= target.length, arr.length <= 10^5
1 <= target[i], arr[i] <= 10^9
target 不包含任何重复元素。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-operations-to-make-a-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

动态规划应用–最长递增子序列 LeetCode 300

  • 建立新的数组 arr_idx,把 arr 中 出现在 target 里的数字,这个数字对应在 target 里的下标存入
  • 然后对 arr_idx 使用 nlogn 的 最长上升子序 DP
  • 注意本题的 互不相同 条件,没有这个条件,以下解法失效
class Solution {
public:int minOperations(vector<int>& target, vector<int>& arr) {unordered_map<int,int> num_idx;for(int i = 0; i < target.size(); ++i)num_idx[target[i]] = i;vector<int> arr_idx;for(auto a : arr)if(num_idx.find(a) != num_idx.end())arr_idx.push_back(num_idx[a]);//存的idx//转化成在 arr_idx 中找最长上升子序列// 数据量很大,不能用 n^2 解法,需要 nlgn 解法vector<int> dp;//存最长上升子序末尾最小的数dp.reserve(num_idx.size()+1);//设置容量,避免搬移for(int i = 0; i < arr_idx.size(); ++i){int cur = arr_idx[i];auto pos = lower_bound(dp.begin(),dp.end(),cur);if(pos == dp.end())dp.push_back(cur);else*pos = cur;}return target.size()-dp.size();//最少操作次数}
};

784 ms 110.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 16.04系统中nvidai、cuda、cudnn安装及注意事项

一、NVIDAI driver显卡驱动安装 首先看一下笔记本显卡型号 lspci |grep VGA 在命令行敲过这个命令后&#xff0c;有些台式机或笔记本会显示nvidia显卡&#xff0c;如下所示&#xff1a; 但是我的笔记本电脑 只显示nouveau卡&#xff08;集成显卡&#xff09; 需要执行下面命…

LeetCode 552. 学生出勤记录 II(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个正整数 n&#xff0c;返回长度为 n 的所有可被视为可奖励的出勤记录的数量。 答案可能非常大&#xff0c;你只需返回结果mod 10^9 7的值。 学生出勤记录是只包含以下三个字符的字符串&#xff1a; A : Absent&#xff0c;缺勤 L : L…

ubuntu定时执行python脚本方法及实例代码

一、前言 本文将介绍ubuntu系统下如何定时执行shell脚本、python脚本&#xff0c;ubuntu系统有一个定时任务的管理器crontab&#xff0c;我们只需要编辑定时任务&#xff0c;然后重启定时任务服务就好了。 二、工具&#xff1a;crontab a、编辑定时任务&#xff1a; crontab -…

LeetCode 940. 不同的子序列 II(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 S&#xff0c;计算 S 的不同非空子序列的个数。 因为结果可能很大&#xff0c;所以返回答案模 10^9 7. 示例 1&#xff1a; 输入&#xff1a;"abc" 输出&#xff1a;7 解释&#xff1a;7 个不同的子序列分别是 &qu…

[Jmeter]Jmeter环境搭建

Jmeter环境搭建 1、 拷贝 \\szpc1450\apache-jmeter-2.7 整个目录到本机(我是放在D盘&#xff0c;以下路径说明以D盘为例) 2、 拷贝\\szpc1450\Tools\autotest softwares\jdk-6u11-windows-i586-p.exe到本机之后进行安装 安装完毕之后添加环境变量 JAVA_HOME C:\Program File…

LeetCode 907. 子数组的最小值之和(单调栈)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 A&#xff0c;找到 min(B) 的总和&#xff0c;其中 B 的范围为 A 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此返回答案模 10^9 7。 示例&#xff1a; 输入&#xff1a;[3,1,2,4] 输出&a…

Python环境下,提高pip安装库速度的方法!

一、前言 学习 Python 的话&#xff0c;仅掌握标准库是远不够的&#xff0c;有很多好用的第三方库我们也需要用到的 大家发现 pip install 包名 的方式 安装第三方库的时候&#xff0c;下载速度很慢&#xff0c;有时还会超时&#xff0c;遇到第三方库比较大时候&#xff0c;…

LeetCode 792. 匹配子序列的单词数(二分查找)

文章目录1. 题目2. 解题1. 题目 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数。 示例: 输入: S "abcde" words ["a", "bb", "acd", "ace"] 输出: 3 解释: 有三个是 S 的子序列的单词: "…

利用Python从字幕网上下载自己所需要的字幕(热门电影、美剧等)

一、前言 主要需求&#xff1a;利用python从字幕库网站上下载字幕 字幕网址&#xff1a;http://www.zimuku.la/ 二、方法&#xff1a; 1、打开网站&#xff0c;搜索自己所需要的字幕&#xff1a; 2、开始写代码&#xff1a; a、配置标头&#xff0c;手动输入下载的字幕名字…

ASP.NET开发,简化与封装

微软的ASP.NET的开发&#xff0c;就是面向对象的编程&#xff0c;当然前端也能体验至面向对象的话&#xff0c;使用Web控件也必须的。任一控件&#xff0c;我们均可以在后端.aspx.cs或.aspx.vb程序中new一个对象出来。很多场合里&#xff0c;在开发ASP.NET开发中&#xff0c;后…

调用Django中的API时,使用Pycharm给后端view打断点的方法

一、前言 使用Pycharm写后端很便捷&#xff0c;但是项目运行后&#xff0c;无法找到简洁的debug方法&#xff0c;本文主要以图文形式&#xff0c;说明一下利用Postman与Pycharm来给项目debug 二、方法 1、使用Pycharm打开项目文件&#xff0c;点击右上角&#xff0c;编辑配置文…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(BERT)

文章目录1. 数据处理2. 下载预训练模型3. 加载数据4. 定义模型5. 训练6. 提交测试结果练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;spacy&#xff09; [Kaggle] Spam/Ham E…

python 中main函数总结

Python使用缩进对齐组织代码的执行&#xff0c;所有没有缩进的代码&#xff08;非函数定义和类定义&#xff09;&#xff0c;都会在载入时自动执行&#xff0c;这些代码&#xff0c;可以认为是Python的main函数。 每个文件&#xff08;模块&#xff09;都可以任意写一些没有缩进…

python从图片里提取主要颜色

一、需求&#xff1a; 从一张图片里提取主要的几种颜色 二、效果&#xff1a; 三、代码 from PIL import Image, ImageDraw, ImageFontdef get_dominant_colors(infile):image Image.open(infile)# 缩小图片&#xff0c;否则计算机压力太大small_image image.resize((80, …

LeetCode 790. 多米诺和托米诺平铺(动态规划)

文章目录1. 题目2. 解题1. 题目 有两种形状的瓷砖&#xff1a; 一种是 2x1 的多米诺形&#xff0c; 另一种是形如 “L” 的托米诺形。 两种形状都可以旋转。 XX <- 多米诺XX <- "L" 托米诺 X给定 N 的值&#xff0c;有多少种方法可以平铺 2 x N 的面板&…

Django后端编辑图片提取主要颜色API

一、需求 前端页面需要调用后端API&#xff0c;实现获取主要颜色json数据 二、图片效果 三、代码实现&#xff1a; # Create your views here. import os from django.core.files.storage import default_storage from django.http import HttpResponse, JsonResponse from …

LeetCode 898. 子数组按位或操作(前缀和思想)

文章目录1. 题目2. 解题2.1 超时解2.2 正解1. 题目 我们有一个非负整数数组 A。 对于每个&#xff08;连续的&#xff09;子数组 B [A[i], A[i1], ..., A[j]] &#xff08; i < j&#xff09;&#xff0c;我们对 B 中的每个元素进行按位或操作&#xff0c;获得结果 A[i] …

天池 在线编程 回合制游戏(前缀和)

文章目录1. 题目2. 解题1. 题目 QW 是一个回合制游戏的玩家&#xff0c;今天他决定去打怪。 QW 在一场战斗中会碰到 n 个怪物&#xff0c;每个怪物有攻击力 atk[i]&#xff0c;每回合结束时如果第 i 个怪物还活着&#xff0c;就会对 QW 造成 atk[i] 的伤害。 QW 只能在每回合…

Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》尾末附下载地址

一、前言 如今&#xff0c;人们面临的大多数任务都可以通过编写计算机软件来完成。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过Python编程&#xff0c;我们能够解决现实生活中的很多任务。 今天给大家分享一份Python程序员的圣经——《Python编程快…

POJ 3608

1.计算P上y坐标值最小的顶点&#xff08;称为 yminP &#xff09;和Q上y坐标值最大的顶点&#xff08;称为 ymaxQ&#xff09;。 2.为多边形在 yminP 和 ymaxQ 处构造两条切线 LP 和 LQ 使得他们对应的多边形位于他们的右侧。 此时 LP 和 LQ 拥有不同的方向&#xff0c; 并且 y…