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. 得到子序列的最少操作次数(好题!!!!!)

LeetCode 1713 得到子序列的最少操作次数[Map 二分法] HERODING的LeetCode之路

1713. 得到子序列的最少操作次数(最长上升子序列问题)

1713. 得到子序列的最少操作次数(最长上升子序列问题)

《LeetCode之每日一题》:108.得到子序列的最少操作次数