待解决 : 组件灰度发布

题目描述

为了提高客户端开发效率和发布速度,需从客户端抽象出不同功能的组件,并且每个组件可以独立开发和发布。为实现上述功能,需要实现一个组件灰度发布服务,核心功能是

  1. 按用户ID范围来灰度发布组件,例如范围a{1,10}发布组件1,范围b{5,20}发布组件2,范围c{15,25}发布组件3,其中a、b、c的范围是有可能重叠,为提高查找效率和节省空间,需对所有范围进行合并和拆分,最终输出为范围A{1,4}发布组件1,B{5,10}发布组件1和2,C{11,14}发布组件2,D{15,20}发布组件2和3,E{21,25}发布组件3

输入描述:

输入有多行,每一行表示用户ID范围和对应的组件ID

输出描述:

输出有多行,每一行表示用户ID范围和对应的组件列表,范围从小到大排序,各个数字之间用空格隔开,行末无空格

示例1

输入

1 10 1
5 20 2
15 25 3

输出

1 4 1
5 10 1 2
11 14 2
15 20 2 3
21 25 3
在这里插入图片描述

my code

#include"iostream"
using namespace std;
#include"algorithm"
#include"vector"
typedef struct ele{
    int q, w, e;
}element;

bool myless(element x, element y){return x.e < y.e ; }

inline bool diff(vector<short>& x, vector<short>& y){
    if(x.size() != y.size()) return true;
    else for(int i = 0, sz = x.size(); i < sz; i++)
        if(x[i] != y[i]) return true;
    return false;
}
inline void out(vector<short>& x){
    int i = 0, sz = x.size();
    for(; i < sz - 1; i++)
        printf("%d ", ++x[i]);
    printf("%d\n", ++x[i]);
}
int main(){
    vector<element> v;
    vector<unsigned> range;
    int q, w, e, rgmax = 0;
    for(; scanf("%d%d%d", &q, &w, &e) != EOF ; ) {
        v.push_back(element{q, w, e});
        rgmax = rgmax > w ? rgmax : w;
    }
    //sort(v.begin(), v.end(), myless);
    unsigned len = v.size();
    if(len == 0) return 0;
    vector<vector<short>> cus(rgmax + 1);
    for(int r = 0; r < len; r++)
        for(int ii = v[r].q; ii <= v[r].w; ii++)
            cus[ii].push_back(r);
    int j = 1, bg = j;
    for(; j < rgmax;){
        if(diff(cus[j], cus[++j])){
            printf("%d %d ", bg, j - 1);
            out(cus[bg]);
            bg = j;
        }
    }
    printf("%d %d ", bg, j);
    out(cus[bg]);
    return 0;
}

result

在这里插入图片描述

发布了19 篇原创文章 · 获赞 2 · 访问量 337

猜你喜欢

转载自blog.csdn.net/qq_43008718/article/details/104208674