【拒绝算法PUA】 729. 我的日程安排表 I

系列文章目录

【拒绝算法PUA】0x00-位运算
【拒绝算法PUA】0x01- 区间比较技巧
【拒绝算法PUA】0x02- 区间合并技巧
【拒绝算法PUA】0x03 - LeetCode 排序类型刷题
【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中

C++刷题技巧总结:
[温习C/C++]0x04 刷题基础编码技巧



LeetCode 729. 我的日程安排表 I

链接

729. 我的日程安排表 I

题目

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。

当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。

日程可以用一对整数 startTime 和 endTime 表示,这里的时间是半开区间,即 [startTime, endTime), 实数 x 的范围为,  startTime <= x < endTime 。

实现 MyCalendar 类:

MyCalendar() 初始化日历对象。
boolean book(int startTime, int endTime) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。
 

示例:

输入:
["MyCalendar", "book", "book", "book"]
[[], [10, 20], [15, 25], [20, 30]]
输出:
[null, true, false, true]

解释:
MyCalendar myCalendar = new MyCalendar();
myCalendar.book(10, 20); // return True
myCalendar.book(15, 25); // return False ,这个日程安排不能添加到日历中,因为时间 15 已经被另一个日程安排预订了。
myCalendar.book(20, 30); // return True ,这个日程安排可以添加到日历中,因为第一个日程安排预订的每个时间都小于 20 ,且不包含时间 20 。
 

提示:

0 <= start < end <= 109
每个测试用例,调用 book 方法的次数最多不超过 1000 次。

分析

在这里插入图片描述

解题方法1

#include <iostream>
#include <vector>

using namespace std;

class MyCalendar {
public:
    MyCalendar() {
        db = vector<vector<int>>();
    }

    bool check(int start2, int end2) {
        bool flag = false; // 默认没有重合
        for (auto data : db) {
            int start1 = data[0];
            int end1 = data[1];
            bool cmp1 = end1 <= start2; // 不交叉:场景1
            bool cmp2 = end2 <= start1; // 不交叉:场景2
            if (!cmp1 && !cmp2) {
                flag = true; // true表示有重合
                break;
            }
        }
        return flag;
    }

    bool book(int startTime, int endTime) {
        if (db.empty()) {
            db.push_back(vector<int> {startTime, endTime});
            return true;
        }

        bool res = true; // 默认无重合,可以添加
        if (check(startTime, endTime)) {
            res = false; // 更新状态的有重合,此时不添加数据到db
        }

        if (res) {
            db.push_back(vector<int> {startTime, endTime});
        }
        return res;
    }

private:
    vector<vector<int>> db;
};

在这里插入图片描述

解题方法2(优化版本)

#include <iostream>
#include <vector>
using namespace std;
class MyCalendar {
public:
    MyCalendar() {
    }
    bool book(int startTime, int endTime) {
        for (const auto& data : db) {
            int start1 = data.first;
            int end1 = data.second;
            if (max(start1, startTime) < min(end1, endTime)) {
                return false;
            }
        }
        db.emplace_back(startTime, endTime);
        return true;
    }

private:
    vector<pair<int, int>> db;
};

int main(int argc, char **argv) {
    MyCalendar* obj = new MyCalendar();
    // [10, 20], [15, 25], [20, 30]
    bool param_1 = obj->book(10,20);  // true
    bool param_2 = obj->book(15, 25); // false
    bool param_3 = obj->book(20, 30); // true
    return 0;
}

在这里插入图片描述

### 关于 PUA.MPE.BURDEN.A 的病毒类型、定义及特征 PUA.MPE.BURDEN.A 是一种潜在不需要的应用程序(Potentially Unwanted Application, 简称 PUA),通常与恶意软件或广告软件相关联。以下是关于该类型的详细描述: #### 类型 PUA.MPE.BURDEN.A 被分类为 **潜在不必要的应用程序**,这意味着它可能不会直接破坏系统功能,但会对用户体验造成负面影响[^4]。 #### 定义 此类病毒主要通过捆绑安装或其他隐蔽方式进入用户的计算机系统。它们可能会收集用户数据、显示侵入性广告或将流量重定向到不可信网站,从而影响设备性能和隐私安全[^5]。 #### 特征 1. **隐秘安装**: 用户往往在不知情的情况下下载并安装这些程序,通常是由于未仔细阅读软件许可协议中的附加组件说明。 2. **资源消耗高**: 运行时占用大量 CPU 和内存资源,可能导致系统变慢甚至崩溃。 3. **弹窗广告频繁**: 显示大量的商业推广信息干扰正常操作体验。 4. **跟踪活动**: 可能记录浏览习惯和其他个人行为用于精准营销目的;某些情况下还涉及更深层次的数据窃取行为违反隐私权规定[^6]。 对于防范措施方面建议定期更新防病毒软件数据库保持最新状态以便及时检测清除威胁源;同时谨慎对待来自未知发件人的邮件附件链接以及第三方应用商店外的产品下载请求以降低感染几率。 ```python import os from antivirus_api import scan_file def check_virus(file_path): result = scan_file(file_path) if 'PUA.MPE.BURDEN.A' in result['threats']: print(f"The file {file_path} is infected with PUA.MPE.BURDEN.A.") else: print(f"No threat detected in the file {file_path}.") # Example usage check_virus('/path/to/suspicious/file.exe') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值