Queue Time Stamp


Description:

给你两个independent queue,每个queue都存着timestamp,只能有getNext()来取queue里面的timestamp,每个timestamp只能被取一次,比较这两个queue里的timestamp,如果差值<1,print这两个timestamp。

Example:

例如:
Q1 0.2, 1.4, 3.0
Q2 1.0 1.1, 3.5
output: (0.2, 1.0), (1.4, 1.0), (0.2, 1.1), (1.4, 1.1), (3.0, 3.5)

Idea:

如果只有两个queue的话,从queue1里取数,然后keep一个deque buffer存queue2的数,每次如果deque前的数不符合条件就pop front,然后补充新的符合条件的数到deque后边。

如果N个queue,我想是还是deque buffer,然后先取最小的,然后所有符合条件的都进去,以从小到大顺序,然后把所有的pair都output(如果是自己queue里的不行)。然后再把deque front的拿出来,符合条件的进deque,然后output,继续这样。

Code:

#include <iostream>
#include <vector>
#include <climits>
#include <cassert>
#include <unordered_set>
#include <deque>
#include <cmath>

using namespace std;

vector<pair<double, double>> printTwoQueue(const vector<double>& q1, const vector<double>& q2){
    vector<pair<double, double>> result;

    deque<double> q2_buff;
    int q2_ind=0;

    for(auto q1_tim: q1){
        // 清理不符合条件的
        while(!q2_buff.empty() && abs(q1_tim-q2_buff.front())>1){
            q2_buff.pop_front();
        }
        // 符合条件的new element进去buffer
        while(q2_ind<q2.size() && abs(q1_tim-q2[q2_ind])<=1){
            q2_buff.push_back(q2[q2_ind]);
            q2_ind++;
        }
        for(auto e: q2_buff){
            result.push_back({q1_tim, e});
        }
    }

    return result;
}

int main(){
    vector<double> q1={0.2, 1.4, 3.0, 3.6, 3.9};
    vector<double> q2={1.0, 1.1, 3.5};

    vector<pair<double, double>> output = printTwoQueue(q1, q2);

    for(const auto & e: output){
        cout<<e.first<<' '<<e.second<<endl;
    }

}

results matching ""

    No results matching ""