Leetcode第144场周赛总结

5117.IP地址无效化

首先计算出输入IP地址的长度,然后遍历每一个字符。

如果当前字符为'.',就在它的前后两侧分别加上'['和']'字符。

值得一提的是,C++的String类型提供了以上操作的函数,我们可以直接调用内部函数,使得我们的程序更加简洁,更加清晰明了。

下面给出AC代码:

class Solution {
public:
    string defangIPaddr(string address) {
        int len = address.size();//直接计算出IP地址的长度
        for (int i = 0; i < len; i++)//遍历每一个字符
        {
            if (address[i] == '.')//如果当前字符为'.'
            {
                address.insert(i, "[");//在它的前面添加'['字符
                address.insert(i + 2, "]");//在它的后面添加']'字符
                i = i + 2;//由于添加了2个字符,因此当前位置应该加上2
                len = len + 2;//字符串长度也要加上2
            }
        }
        return address;//返回处理好的IP地址
    }
};

5118.航班预订统计

设a[i]表示第i个航班预订的座位数。

定义一个差分数组tag[],tag[i]表示第i个航班与第i-1个航班预订座位的差,即tag[i] = a[i] - a[i - 1]。

这样,我们每次扫描到[i, j, k],就只需要将tag[i]增加k,tag[j + 1]减少k即可。

最后,计算a[i] = a[i - 1] + tag[i],返回a即可。

给出代码:

class Solution {
public:
    vector<int> corpFlightBookings(vector<vector<int> >& bookings, int n) {
        int tag[20003], len = bookings.size();//定义tag数组并计算预订表的长度
        vector<int>a(n, 0);//定义一个长度为n且值为0的动态数组
        memset(tag, 0, sizeof(tag));//清零tag数组
        for (int i = 0; i < len; i++) {//扫描每一个预订记录
            tag[bookings[i][0]] += bookings[i][2];//对tag数组进行操作
            tag[bookings[i][1] + 1] -= bookings[i][2];
        }
        for (int i = 0; i < n; i++) {//计算每趟航班预订的座位数
            if (i == 0) a[i] = tag[i + 1];
            else a[i] = a[i - 1] + tag[i + 1];
        }
        return a;//直接返回即可
    }
};

猜你喜欢

转载自www.cnblogs.com/xsl19/p/11146250.html
今日推荐