1713. 得到子序列的最少操作次数
给你一个数组 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
解释:你可以添加 5 和 1 ,使得 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
解题思路
- 因为数组 target包含若干互不相同的整数,所以我们可以使用map完成数组元素和下标的映射关系
- 在遍历arr数组的时候,可以根据map找出元素在target对应的下标,因为题目要求添加最少元素使得 target 成为 arr 的一个子序列,因此我们的目标就是在target数组中选出一个最长的子序列(该子序列同时也是arr的子序列),所以最终可以转化为最长递增子序列的问题,将arr数组映射成为target的下标数组
代码
func minOperations(target []int, arr []int) int {n := len(target)m:= make(map[int]int, n)for i, v := range target {m[v]=i}res := []int{}for _, v := range arr {if i2,has := m[v];has {searchInts := sort.SearchInts(res, i2)if searchInts<len(res) {res[searchInts]=i2}else {res=append(res,i2)}}}return n-len(res)}
```**加粗样式**
1713. 得到子序列的最少操作次数相关推荐
- LeetCode 1713. 得到子序列的最少操作次数(最长上升子序DP nlogn)
文章目录 1. 题目 2. 解题 1. 题目 给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素. 每一次操作中,你可以在 arr 的任 ...
- Leetcode1713. 得到子序列的最少操作次数[C++题解]:LCS转化成LIS,转化为nlogn做法
文章目录 本题分析 题目链接 本题分析 本题难在问题转换上. [问题转化1]转化为求两个序列最长公共子序列(LCS)的长度. 然后target 的长度减去 公共子序列的长度,就是答案. 本题数据规模是 ...
- leedcode04:转换字符串的最少操作次数
一:题目 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' . 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O' .注意,如果字符已经是 ...
- 2027. 转换字符串的最少操作次数
2027. 转换字符串的最少操作次数 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' . 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O ...
- LeetCode 1775. 通过最少操作次数使数组的和相等(贪心+双指针)
文章目录 1. 题目 2. 解题 1. 题目 给你两个长度可能不等的整数数组 nums1 和 nums2 . 两个数组中的所有值都在 1 到 6 之间(包含 1 和 6). 每次操作中,你可以选择 任 ...
- LeetCode 1674. 使数组互补的最少操作次数(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...
- 最少操作次数(英雄会)
作者博客链接 题目详情: 给定两个字符串,仅由小写字母组成,它们包含了相同字符. 求把第一个字符串变成第二个字符串的最小操作次数,且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头. 例如 ...
- LeetCode 2208. 将数组和减半的最少操作次数(优先队列)
文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数数组 nums .每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半.(注意,在后续操作中你可以对减半过的数继续 ...
- LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符. 请你返回让 s 成为回文串的 最少操作次数 . 「回文串」是正读和反读都相同的字 ...
最新文章
- python掌握程度怎么判断-Python数据分析路上,温故而知新
- SpringBoot微信公众号授权访问认证文件部署
- 有了内阻值,怎么判断电池是否健康?
- Mybatis学习之单表增删改查
- pythonidea_idea集成python插件
- Cocos2D v2.0至v3.x简洁转换指南(一)
- iOS之设置用户头像的圆角
- 三个火一个木组成的燊怎么读,燊是什么意思?
- 让计算机教育因云而变,阿里云正式发布云原生人才培养合作计划
- git 推送出现 fatal: The remote end hung up unexpectedly 解决方案
- OpenCV图像模糊处理
- 行政地名、行政区划名、地名分类(矢量数据)
- shell 参数的分组读取
- Android批量打包-如何一秒内打几十个apk渠道包
- 关于产品的一些思考——阿里巴巴之阿里旺旺
- 什么是句柄、什么是自上而下、自下而上分析—编译原理
- 平板电脑支持html吗,HTML5视频无法在平板电脑上播放(HTML5 video not playing on tablets)...
- 自然语言处理(二)基于CNN的新闻文本分类
- 计算机程序设计基础试题,2010计算机程序设计基础试题A2卷(考试时间:2010-7-1)new...
- 女性如何理解男人的性需求? 男性的性表达
热门文章
- 类模板static成员的使用
- 如何在linux上安装sqlite数据库
- 【计算机系统设计】学习笔记(1)03,04
- javascript继承模式原理与示例深入剖析
- 为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
- SQL server 复习一
- VisualStudio中的代码段
- 用JQuery中的Ajax方法获取web service等后台程序中的方法
- 设计模式笔记(7)---适配器模式(结构型)
- vss和vs2008组合搭建源代码管理器