当前位置: 首页 > news >正文

做网站需要icp吗网站备案名称规则

做网站需要icp吗,网站备案名称规则,天津市建筑信息平台,上海开公司需要多少钱LC1713. 得到子序列的最少操作次数 题目描述LIS 动态规划 二分法代码演示 题目描述 难度 - 困难 LC1713.得到子序列的最少操作次数 给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。 每一次…

LC1713. 得到子序列的最少操作次数

  • 题目描述
    • LIS 动态规划 + 二分法
    • 代码演示

题目描述

难度 - 困难
LC1713.得到子序列的最少操作次数

给你一个数组 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

提示:
1 <= target.length, arr.length <= 10^5
1 <= target[i], arr[i] <= 10^9
target 不包含任何重复元素。
在这里插入图片描述

LIS 动态规划 + 二分法

为了方便,我们令 target 长度为 n,arr 长度为 m,target 和 arr 的最长公共子序列长度为 max,不难发现最终答案为 n−max。
因此从题面来说,这是一道最长公共子序列问题(LCS)。
但朴素求解 LCS 问题复杂度为 O(n∗m),使用状态定义「f[i][j] 为考虑 a 数组的前 i 个元素和 b 数组的前 j 个元素的最长公共子序列长度为多少」进行求解。
而本题的数据范围为 10^5,使用朴素求解 LCS 的做法必然超时。
一个很显眼的切入点是 target 数组元素各不相同,当 LCS 问题增加某些条件限制之后,会存在一些很有趣的性质。
其中一个经典的性质就是:当其中一个数组元素各不相同时,最长公共子序列问题(LCS)可以转换为最长上升子序列问题(LIS)进行求解。同时最长上升子序列问题(LIS)存在使用「维护单调序列 + 二分」的贪心解法,复杂度为 O(nlog⁡n)。
因此本题可以通过「抽象成 LCS 问题」->「利用 target数组元素各不相同,转换为 LIS 问题」->「使用 LIS 的贪心解法」,做到 O(nlog⁡n) 的复杂度。

朴素的 LIS 问题求解,我们需要定义一个 f[i] 数组代表以 nums[i] 为结尾的最长上升子序列的长度为多少。
对于某个 f[i] 而言,我们需要往回检查 [0,i−1] 区间内,所有可以将 nums[i] 接到后面的位置 jjj,在所有的 f[j]+1中取最大值更新 f[i]。因此朴素的 LIS 问题复杂度是 O(n^2) 的。
LIS 的贪心解法则是维护一个额外 ggg 数组,g[len]=x 代表上升子序列长度为 lenlenlen 的上升子序列的「最小结尾元素」为 x。
整理一下,我们总共有两个数组:

  1. f 动规数组:与朴素 LIS 解法的动规数组含义一致。f[i]f[i]f[i] 代表以 nums[i] 为结尾的上升子序列的最大长度;
  2. g 贪心数组:g[len]=x代表上升子序列长度为 len 的上升子序列的「最小结尾元素」为 x。

由于我们计算 f[i] 时,需要找到满足 nums[j]<nums[i],同时取得最大 f[j] 的位置 j。

我们期望通过 g 数组代替线性遍历。
显然,如果 g 数组具有「单调递增」特性的话,我们可以通过「二分」找到符合 g[idx]<nums[i] 分割点 idxi(下标最大),即利用 O(log⁡n) 复杂度找到最佳转移位置。

代码演示

class Solution {public int minOperations(int[] target , int[] arr) {Map<Integer, Integer> map = new HashMap();int Tlen = target.length, Alen = arr.length;//1:target的元素和对应下标 装入mapfor(int i = 0; i < Tlen; i++) map.put(target[i], i);//2:在arr中寻找相等的值的下标装入下标数组int[] index = new int[Alen];int p = 0;for(int i = 0; i < Alen; i++){if(map.containsKey(arr[i])) index[p++] = map.get(arr[i]);}//3:直接调用处理最长递增公共子串代码(之前做过,这里赋值过来,偷懒)int uplen = lengthOfLIS(index,p);return Tlen - uplen;}public int lengthOfLIS(int[] nums,int n){if(n == 0) return 0;int res = 1;int[] dp = new int[n];dp[0] = nums[0];for(int num:nums){int i = 0,j = res;while(i < j){int mid = (i + j)>>1;if(dp[mid] >= num) j = mid;else i = mid + 1;}dp[i] = num;if(j == res) res++;}return res;}}
http://www.yayakq.cn/news/50744/

相关文章:

  • 万江区做网站给人做网站
  • 九亭做网站公司环宇网站建设
  • 广东电子商务网站建设价格北京市场调研公司
  • 网站上上传图片 怎么做电商可以从事的行业有哪些
  • 东莞中小企业网站制作企业形象设计成功案例
  • 龙岩做网站开发价格网站建设款分录
  • 公司的网站的设计高校网站建设存在问题
  • ac86u做网站服务器西安网站的设计说明
  • 公司网址怎么注册步骤花生壳内网穿透网站如何做seo优化
  • 长沙市门户网站建设iis7网站建设
  • 网站开发是什么专业百度北京网页设计软件培训学校
  • 杭州开发网站的公司客户网站开发全流程
  • 网站设计知名企业WordPress集成插件到主题
  • 企业网站定制开发流程松岗网站建设
  • 珠海市做网站公司互联网行业市场分析
  • 网站编辑没有经验可以做吗公众号做电影网站赚钱
  • wordpress社交类主题天津网站的优化
  • 百度灰色词优化排名广州seo教程
  • 宁波网站设计企业南宁市兴宁建设局网站
  • 百度智能云网站建设wordpress生成默认密码
  • 设计企业网站首页成都计算机培训机构哪个最好
  • h5响应式网站建设非盈利网站建设问题
  • 济宁市任城区建设局网站河南seo公司
  • 南京有制作网站的吗邯郸房地产网站建设
  • 网站设计公司合肥网站建设主流编程软件
  • 沈阳微营销网站制作昆明软件开发公司
  • 用护卫神做网站两学一做纪实评价系统登陆网站
  • 建设企业网站需要了解什么wordpress会员登录界面美化
  • 佛山市城乡和住房建设局网站网站开发 在线数据库
  • 动态手机网站北京建设网站制作