C++二分算法:得到子序列的最少操作次数

慈云数据 2024-03-18 技术支持 61 0

本文涉及的基础知识点

二分查找算法合集

C++二分算法:得到子序列的最少操作次数
(图片来源网络,侵删)

题目

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

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

C++二分算法:得到子序列的最少操作次数
(图片来源网络,侵删)

请你返回 最少 操作次数,使得 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 public: int minOperations(vector unordered_map mValueIndex[target[i]] = i; } vector if (mValueIndex.count(n)) { vNew.emplace_back(mValueIndex[n]); } } vector auto it = std::lower_bound(vLenToEndIndex.begin(), vLenToEndIndex.end(), n); if (vLenToEndIndex.end() == it) { vLenToEndIndex.emplace_back(n); } else { if (n

{

mValueNum.erase(it);

}

}

m_iMaxPublicNum = max(m_iMaxPublicNum, iNum);

mValueNum[a] = iNum;

}

}

vector m_arr;

int m_iMaxPublicNum=0;//最大公共系列

};

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。

https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程

https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版

https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon