zoukankan      html  css  js  c++  java
  • a_lc_包含每个查询的最小区间(反向思维:先排好序+数据结构优化查询)

    给你一个整数数组 queries 。第 j 个查询的答案是在 ints 这个二维数组中找到满足 (left_i <= queries[j] <= right_i) 的 长度最小区间 i 的长度 。如果不存在这样的区间,那么答案是 -1 。
    两个数组的长度都<=1e5

    思路:一般我们都会先遍历 qs,然后再嵌套遍历 ints,但正确做法一般都是反着来:先将 ints 数组按照区间长度排序,然后对于第 i 个查询 qs[i],只要在 ints 中找到满足 ints[j][0] <= qs[i] <= ints[j][1] 即可,因为排完序之后,区间长度是最小的了,省去了这部分的消耗

    class Solution {
    public:
        vector<int> minInterval(vector<vector<int>>& ints, vector<int>& qs) {
            int n = qs.size();
            vector<int> ans(n, -1);
            set<pair<int, int>> st;
            for (int i = 0; i < n; i++) {
                st.insert({qs[i], i});
            }
            sort(ints.begin(), ints.end(), [](vector<int>& a, vector<int>& b) {return a[1] - a[0] < b[1] - b[0];});
            for (auto& i : ints) {
                auto q = st.lower_bound({i[0], -1});
                while (q != st.end() && q->first <= i[1]) {
                    ans[q->second] = i[1] - i[0] + 1;
                    st.erase(q++);
                }
            }
            return ans;
        }
    };
    
  • 相关阅读:
    闭包
    保存数据
    Browers Object Model
    JavaScript中的null和undefined
    魔法查询函数
    《黑客与画家》 读书感想
    CakePHP查询数据
    HDFS写入和读取流程
    回调函数
    JAVA中的指针
  • 原文地址:https://www.cnblogs.com/wdt1/p/14738619.html
Copyright © 2011-2022 走看看