首页 > 其他分享 >100311. 无需开会的工作日

100311. 无需开会的工作日

时间:2024-06-02 20:13:17浏览次数:19  
标签:count 无需 end int 天数 meetings start 开会 100311

题目描述

给你一个正整数 days,表示员工可工作的总天数(从第 1 天开始)。另给你一个二维数组 meetings,长度为 n,其中 meetings[i] = [start_i, end_i] 表示第 i 次会议的开始和结束天数(包含首尾)。

返回员工可工作且没有安排会议的天数。

注意:会议时间可能会有重叠。

情况描述

6月2日周赛只做出来一个题

思路

  • 先按开会开始时间排序,再按开会结束时间排序,这样如果日期有重叠,那么一定是相邻的。用count记录开会的天数,初始化为第一次开会的天数
  • 用一个区间记录最近的会议起止时间,start记录会议开始事件,初始化为第一次会议开始时间,end记录会议结束时间,初始化为第一次会议结束时间。下一次会议到来时,分三种情况:
    1. 开始时间大于等于start,结束时间小于等于end,完全重叠,这说明下一次会议完全在当前会议时间的范围之内,count不用改变,直接略过即可。
    2. 开始时间小于等于end,结束时间大于等于end,这说明部分重叠,开会天数只用加上比当前会议多出的天数即可,count += (meetings[i][1] - end),并且更新end为meetings[i][1]
    3. 开始时间大于end,说明没有发生重叠,更新start和end,count += (start - end + 1)

代码

class Solution {
public:
     static bool cmp(const vector<int>& a,const vector<int>& b){
            if (a[0] == b[0]) {
            return a[1] < b[1];
            }
        return a[0] < b[0];
    }
    int countDays(int days, vector<vector<int>>& meetings) {
        int n = meetings.size();
        sort(meetings.begin(),meetings.end(),cmp);
        
        int start = meetings[0][0];
        int end = meetings[0][1];;
        int count = end - start + 1;
        for(int i = 1;i < n;i++){
            
            if(meetings[i][0] <= end && meetings[i][1] <= end) continue;
            
            if(meetings[i][0] <= end && meetings[i][1] >= end) {
                count += (meetings[i][1] - end);
                end = meetings[i][1];
                
            }else{
                start = meetings[i][0];
                 end = meetings[i][1];
                count += (end - start + 1);
            }
            
        }
        
        return days - count;
    }
};

标签:count,无需,end,int,天数,meetings,start,开会,100311
From: https://www.cnblogs.com/EavenWang/p/18227532

相关文章

  • 100311. 无需开会的工作日
    100311.无需开会的工作日 已解答中等 给你一个正整数 days,表示员工可工作的总天数(从第1天开始)。另给你一个二维数组 meetings,长度为 n,其中 meetings[i]=[start_i,end_i] 表示第 i 次会议的开始和结束天数(包含首尾)。返回员工可工作且没有安排会议的天......
  • 柬埔寨语翻译通App上架啦!支持高棉语翻译成中文,中柬互译,高棉语OCR文字识别提取,提高工作
    大家好!有个超级棒的消息要告诉大家——柬埔寨语翻译通小程序已经上架啦!不论你是安卓还是苹果用户,都可以轻松下载使用!只要微信搜一搜,翻译之路畅通无阻!这不仅仅是一个翻译工具,它还支持高棉语中文双语翻译,翻译结果支持语音朗读,翻译记录自动保存!跟着说跟着读,高棉语词汇轻松掌握......
  • AI视频换脸!最快的方法,100%成功,完全免费,无需配置、打开即用
    这是一个全新的AI视频换脸工具,它是完全免费的,使用起来非常简单和好用。这款工具的效果出色,可以支持CPU和GPU解码。也就是说,即使你的电脑没有独立的显卡,你也可以通过CPU进行解码。我之前介绍过一些其他的AI视频工具,比如AIC音克隆,AI绘画,AI视频一键趣码等等,这些工具的效果也......
  • [JarEditor]一款无需解压直接编辑修改jar内容的IDEA插件
    前言IDEA自带的反编译插件能打开jar反编译class,遗憾的是不能编辑class,有的时候我们需要修改jar的时候还需要解压,反编译class,然后新建.java,修改代码,再编译,最后打包jar。我敢说中间的过程你肯定不是一气呵成的,如果jar有依赖还要花时间去排查,打包的时候还需要注意编译jdk的版本,有的......
  • 29.4K star! 仅需几行代码快速构建机器学习 Web 应用项目,无需前端技能!
    大家好,我是狂师!今天给大家推荐一款开源的Python库:Gradio!Gradio是一个开源的Python库,用于创建机器学习和数据科学的交互式应用和演示。项目地址:https://github.com/gradio-app/gradio1、项目介绍Gradio旨在简化展示和测试机器学习模型的过程,它允许用户通过构建漂亮的界面来......
  • 如何全程使用docker部署jeecg平台,无需安装开发环境(主要是如何使用Docker来进行Maven打
    在部署jeecg平台时,文档中即使通过docker部署,也需要安装开发环境编译一部分内容,本文记录使用docker替代安装环境的过程。使用docker的目的是在平台选型的过程中,不希望麻烦的安装环境,同时如果选型不满意,无需卸载环境就能恢复一个干净的系统。部署环境:UbuntuServer20.04docker,......
  • 无需重新学习,使用 Kibana 查询/可视化 SLS 数据
    1.场景现在通过SLS的ES兼容能力,可以很方便地实现用Kibana来查询和可视化SLS的数据。对于从ES迁移到SLS的用户可以继续保留原来的Kibana使用习惯。下面来演示如何通过Kibana来访问SLS。2.使用方法部署架构这里蓝色部分是需要客户端部署的组件。Kibana就......
  • ssh的空闲超时断开会话方法及反空闲(保持连接)方法
    两种方式:1.设置TMOUT,在用户家目录下设置只针对本用户,在/etc/profile里设置针对全部这个是针对所有tty的,所以本地和ssh超时都会退出注意:大多数的shell客户端工具,如putty,windterm,mobaxterm等里面的保持会话功能,只发送空包,是无法针对TMOUT起作用的tmout命令只对交互式s......
  • PDF加密转APK大师 (支持一机一码, 无需额外安装PDF浏览器, 强力加密保护PDF文件)
    PDF加密转APK大师是一款PDF加密软件,它可以把PDF文件直接转成安卓APP,并支持一机一码加密,静态密码加密等高级功能,可以用来保护PDF文档,防止未经授权的传播,并方便向用户收费.加密生成的APK被高强度加密混淆,并且PDF文件也使用了128位加密保护,可以有效保护PDF文件. ......
  • 无需手动操作:利用 Playwright 自动上传文件
    前言Playwright是一个由Microsoft开发的自动化测试工具,它提供了跨浏览器的自动化测试能力,包括Chrome、Firefox和Safari。除了测试之外,Playwright还可以用于执行浏览器操作,例如模拟用户行为来实现文件上传功能。在本文中,我们将使用Playwright和Python实现自动上传文件......