[补题记录] 基于日志的系统故障预测


某通讯设备系统定义了一系列系统事件,当事件发生时会将该事件ID记录到日志中,该日志的数据全集称为原始事件序列。根据经验,当某些特征事件出现时,往往预示着系统存在需要解决的潜在问题。

现给定一组原始事件序列 events(元素可以重复),以及一个特征序列 traits (元素不重复)
请在 events 中从左往右按匹配规则找到一个匹配特征序列的最短连续子序列;如果存在多个最短的,则返回最早匹配到的连续子序列。

匹配规则:对于 events 中的某个连续子序列,当从中去除 n n n 个(n >= 0)元素后、且不破坏余下元素的相对位置所形成的新序列和特征序列 traits 相同时,则该连续子序列是匹配特征序列的。

注:输入保证至少存在一个匹配的连续子序列。

输入

第一个参数是数组 events,代表原始事件序列,1 < events.length <= 1000
第二个参数是数组 traits,代表特征序列,1 <= traits.length <= 20
0 <= events[i], traits[i] <= 1000

输出

一个连续子序列

样例1

输入:

[4, 8, 4, 3, 6, 6, 8] 
[4, 6, 8]

输出:

[4, 3, 6, 6, 8]

解释:
在这里插入图片描述

如 event 中的一个连续子序列 [4, 3, 6, 6, 8] ,去除其中元素 3 和 任一个 6 后、且余下元素保持相对顺序不变,所形成的新序列 [4, 6, 8] 和特征序列相同,因此所选择的连续子序列 [4, 3, 6, 6, 8] 是匹配特征序列的。

O(n) 做法

在遍历 events 的过程中,一定是不断地出现 traits 中的元素。而只要我们在遇到 traits 中的元素时,让对应的 traits 的元素,指向它的前一个元素在 events 中的位置(pos[ traits[i] ] = pos[ traits[i-1] ]),直到使得 pos[ traits[m] ] 也有所指向,就说明完成了一次合法答案。

代码

#include <vector>

using namespace std;

class Solution {
public:
    vector<int> MatchLogTrait(const vector<int>& events, const vector<int>& traits)
    {
        std::vector<int> latest(1001, -1), traits_to_pos(1001, -1);
        for (int i = 0; i < traits.size(); ++i) {
            traits_to_pos[traits[i]] = i;
        }
        int l = 0, r = events.size() - 1;
        for (int i = 0; i < events.size(); ++i) {
            int cur = events[i];
            int pos = traits_to_pos[cur];
            if (pos == -1) {
                continue;
            }
            if (pos == 0) {
                latest[0] = i;
            } else {
                latest[pos] = latest[pos - 1];
            }
            if (pos == traits.size() - 1) {
                if (latest[pos] != -1 && i - latest[pos] + 1 < r - l + 1) {
                    l = latest[pos];
                    r = i;
                }
            }
        }
        vector<int> ans;
        for (int i = l; i <= r; ++i) {
            ans.push_back(events[i]);
        }
        return ans;
    }
};

O(n^2) 做法

对于 events 中的每个位置,去直接匹配 traits 即可。

代码

#include <vector>

using namespace std;

class Solution {
public:
    vector<int> MatchLogTrait(const vector<int>& events, const vector<int>& traits)
    {
        std::vector<int> ans;
        int ansSize = 1e9;
        int n = events.size(), m = traits.size();
        for (int i = 0; i < n; ++ i) {
            int j = i, k = 0;
            std::vector<int> tmp;
            if (events[i] != traits[0]) continue;
            for (; j < n && k < m; ++ j) {
                if (events[j] == traits[k]) {
                    k ++;
                }
            }
            std::cout << "k = " << k << "\n";
            if (k == m - 1 && tmp.size() < ansSize) {
                ans.clear();
                for (auto &x : tmp) ans.push_back(x);
                ansSize = tmp.size();
            }
        }
        return ans;
    }
};
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于Spring Boot的停车场管理系统是一种现代化的解决方案,它利用Spring Boot框架的优势,提供了一种高效、可靠、易于维护的方式来管理停车场。该系统可以实现车辆进出记录的自动化管理、停车位的实时监控、收费的自动计算等功能,大大提高了停车场的管理效率和服务质量。同时,该系统还支持多种支付方式,如微信支付、支付宝支付等,方便用户进行支付。总之,基于Spring Boot的停车场管理系统是一种高效、智能、便捷的停车场管理解决方案,可以满足不同停车场的管理需求。 ### 回答2: SpringBoot停车场管理系统是一种基于SpringBoot框架的停车场管理软件。该系统利用SpringBoot强大的开发工具、依赖库和自动化配置,来实现一个高效、灵活且易于维护的停车场管理系统。该系统包括了整个停车场的车位管理、车辆信息管理、收费管理等模块。 系统的主要特点如下: 1. 方便的部署和开发:SpringBoot框架自动化配置,支持快速部署和开发,无需过多考虑配置和环境问题,提高开发效率。 2. 丰富的数据库支持:SpringBoot框架支持多种数据库,包括MySQL、MongoDB等,可以根据具体需求选择适合的数据库类型。 3. 安全可靠:系统采用了身份认证和授权技术,保障客户数据的安全性;同时,系统也保证了系统稳定性,并对异常情况进行了处理。 系统的实现需要进行以下几个步骤: 1. 系统整体架构设计,确定模块和功能; 2. 数据库设计,制定数据表、实体类和关系图; 3. 使用SpringBoot框架进行系统搭建,包括不同模块的编写、整合和管理; 4. 完成系统的测试和部署。 系统主要功能: 1. 管理员可以对停车场进行管理,包括正常使用的车位管理、异常车位管理、收费标准设定等; 2. 管理员可以对车辆信息进行管理,包括注册车辆、修改车辆信息、查询车辆信息、删除车辆等; 3. 用户可以通过预约系统预约合适的车位,实现更快捷的停车; 4. 用户可以通过APP等方式进行支付,实现更便捷的缴费。 总之,SpringBoot停车场管理系统能够在优化停车场的利用率和提高停车场的运营效率方面起到很大的作用,同时能够为用户提供更好更满意的服务,是一种非常优秀的停车场管理软件。 ### 回答3: 停车场管理系统是一种应用广泛的管理方式,能够有效地提高车辆出入的效率,同时节省管理成本。目前,随着人们生活水平的提高和私家车的普及,停车场在城市中已经成为必不可少的基础设施之一。基于Spring Boot的停车场管理系统,可以提供便利的管理方式,方便了车主和停车场管理者的使用。 首先,基于Spring Boot的停车场管理系统具有高度的可扩展性和可维护性,可以快速适应不同规模和服务方式的停车场管理模式。同时,它也提供了实时监控和数据统计等功能,可以帮助管理者更好地了解各场区的接待情况、车辆进出次数、停车费用等信息。 其次,基于Spring Boot的停车场管理系统可以分为前台用户和后台管理员两个角色。前台用户可以通过手机APP或自助机进行车辆进出记录和缴费,提高了车主的出行体验。后台管理员可以通过电脑端进行数据管理和设备管理,包括车位号、设备故障、场区巡检等。同时,后台管理员可以进行系统日志记录,方便对操作进行溯源。 再者,基于Spring Boot的停车场管理系统还可以结合互联网和大数据技术,通过数据分析和预测,为车主和管理者提供更好的服务和决策支持。例如,与第三方地图和导航服务进行对接,实时提供场区空位信息;与车辆识别技术结合,进行车辆登记和支付;通过数据分析,预测停车高峰期和低峰期,提供差异化服务。 总之,基于Spring Boot的停车场管理系统是一种高效、便捷、可扩展和可维护的管理方式,它不仅可以提高车主的出行体验,还可以为管理者提供精细化的管理和决策支持,使得停车场管理更加智能化、数字化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值