列表

详情


OR78. 组件灰度发布

描述

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

原站题解

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-10-31

#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
typedef struct number{
//int Count=0;//ID数量
string Id="";
}Num;
int main()
{
    Num num[100];
    char id;
    int j=1;
    int IdFirst,IdEnd,IdMax=0,IdMin=0;
    cin>>IdFirst>>IdEnd>>id;
    IdMax = IdEnd; IdMin = IdFirst;
    for(int i=IdFirst;i<=IdEnd;i++)
    {
        //num[i].Count++;
        num[i].Id += " ";
        num[i].Id += id;
    }
    while(cin>>IdFirst>>IdEnd>>id)
    {
        j++;
        if(IdMax<IdEnd)
           IdMax = IdEnd;
        if(IdMin>IdFirst)
           IdMin = IdFirst;
        for(int i=IdFirst;i<=IdEnd;i++)
        {
            //num[i].Count++;
            num[i].Id += " ";
            num[i].Id += id;
        }
        if(j>=3)
            break;
    }
    string IDs = num[IdMin].Id;
    int Begin = IdMin,End;
    for(int k=IdMin;k<=IdMax;k++)
    {
        if(IDs!=num[k].Id)  //找到区间
        {End = k-1;
        if(num[k-1].Id!="")
        cout<<Begin<<" "<<End<<num[k-1].Id<<endl;
        Begin = k;IDs = num[k].Id; }
        if(k == IdMax)
            cout<<Begin<<" "<<k<<num[k].Id<<endl;
    }
}

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-10-31

#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
typedef struct number{
//int Count=0;//ID数量
string Id="";
}Num;
int main()
{
    Num num[100];
    char id;
    int j=1;
    int IdFirst,IdEnd,IdMax=0,IdMin=0;
    cin>>IdFirst>>IdEnd>>id;
    IdMax = IdEnd; IdMin = IdFirst;
    for(int i=IdFirst;i<=IdEnd;i++)
    {
        //num[i].Count++;
        num[i].Id += " ";
        num[i].Id += id;
    }
    while(cin>>IdFirst>>IdEnd>>id)
    {
        j++;
        if(IdMax<IdEnd)
           IdMax = IdEnd;
        if(IdMin>IdFirst)
           IdMin = IdFirst;
        for(int i=IdFirst;i<=IdEnd;i++)
        {
            //num[i].Count++;
            num[i].Id += " ";
            num[i].Id += id;
        }
        if(j>=3)
            break;
    }
    string IDs = num[IdMin].Id;
    int Begin = IdMin,End;
    for(int k=IdMin;k<=IdMax;k++)
    {
        if(IDs!=num[k].Id)  //找到区间
        {End = k-1;
        if(num[k-1].Id!="")
        cout<<Begin<<" "<<End<<num[k-1].Id<<endl;
        Begin = k;IDs = num[k].Id; }
        if(k == IdMax)
            cout<<Begin<<" "<<k<<num[k].Id<<endl;
    }
}

上一题