LeetCode 1713 得到子序列的最少操作次数[Map 二分法] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1713 得到子序列的最少操作次数[Map 二分法] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
虽然是困难题,但是缕清思路一点也不麻烦。透过题目看本质,其实就是找两个序列汇总最大的连续子序列长度,返回target长度与子序列长度的差值。为了让他们序列有序,采取的方法是按照target的下标排序,形成map的映射,并且在arr中根据映射进行二分查找操作,如果arr中有target的元素,查找count中大于等于该索引的位置,没有说明是按序的,在count中加入该下标,有则把相应位置的值改成该索引,代码注释已经很详细了,代码如下:
class Solution {
public:
int minOperations(vector<int>& target, vector<int>& arr) {
int n = target.size();
unordered_map<int, int> mp;
// 坐标按序映射
for(int i = 0; i < n; i ++) {
mp[target[i]] = i;
}
vector<int> count;
for(auto& val : arr) {
// 如果count中有该数
if(mp.count(val)) {
int index = mp[val];
// 二分查找大于等于该索引的位置
auto it = lower_bound(count.begin(), count.end(), index);
if(it == count.end()) {
// 没有则说明按序,添加
count.push_back(index);
} else {
// 有则替换
*it = index;
}
}
}
return n - count.size();
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/minimum-operations-to-make-a-subsequence/solution/cji-bai-shuang-90maper-fen-fa-xiang-jie-2no06/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
以上是关于LeetCode 1713 得到子序列的最少操作次数[Map 二分法] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
力扣LeetCode-1713. 得到子序列的最少操作次数-题解-最长递增子序列
LeetCode1143. 最长公共子序列/300. 最长递增子序列//1713. 得到子序列的最少操作次数(好题!!!!!)