LeetCode 3169.無需開會的工作日:排序+一次遍歷——不需要正難則反,因為正著根本不難

【LetMeFly】3169.無需開會的工作日:排序+一次遍歷——不需要正難則反,因為正著根本不難

力扣題目鏈接:https://leetcode.cn/problems/count-days-without-meetings/

給你一個正整數 days,表示員工可工作的總天數(從第 1 天開始)。另給你一個二維數組 meetings,長度為 n,其中 meetings[i] = [start_i, end_i] 表示第 i 次會議的開始和結束天數(包含首尾)。

返回員工可工作且沒有安排會議的天數。

注意:會議時間可能會有重疊。

?

示例 1:

輸入:days = 10, meetings = [[5,7],[1,3],[9,10]]

輸出:2

解釋:

第 4 天和第 8 天沒有安排會議。

示例 2:

輸入:days = 5, meetings = [[2,4],[1,3]]

輸出:1

解釋:

第 5 天沒有安排會議。

示例 3:

輸入:days = 6, meetings = [[1,6]]

輸出:0

解釋:

所有工作日都安排了會議。

?

提示:

  • 1 <= days <= 109
  • 1 <= meetings.length <= 105
  • meetings[i].length == 2
  • 1 <= meetings[i][0] <= meetings[i][1] <= days

好奇,怎么都在說正難則反。

解題方法:排序

只需要按照meetings開始的順序從小到大排序,使用一個變量(last)記錄上次會議的結束日期(初始值為0),接著開始遍歷meetings數組。

如果開始時間比last晚不只一天,就說明從last到這個開始時間都有空,累加到答案中。每遍歷完一個meeting,就將last更新為last和meeting結束時間的最大值。

最終,days-last也是空閑時間,累加到答案中。

  • 時間復雜度O(nlog?n)O(n\log n)O(nlogn),其中n=len(meetings)n=len(meetings)n=len(meetings)
  • 空間復雜度O(log?n)O(\log n)O(logn)

AC代碼

C++
/** @Author: LetMeFly* @Date: 2025-07-11 23:25:31* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-07-11 23:33:35*/
class Solution {
public:int countDays(int days, vector<vector<int>>& meetings) {sort(meetings.begin(), meetings.end());int ans = 0;int last = 0;for (vector<int> me : meetings) {// printf("last = %d, me = [%d, %d]\n", last, me[0], me[1]);if (me[0] > last + 1) {ans += me[0] - last - 1;// printf("ans += %d\n", me[0] - last - 1);}last = max(last, me[1]);}ans += days - last;return ans;}
};
Python
'''
Author: LetMeFly
Date: 2025-07-11 23:25:31
LastEditors: LetMeFly.xyz
LastEditTime: 2025-07-12 12:00:22
'''
from typing import Listclass Solution:def countDays(self, days: int, meetings: List[List[int]]) -> int:ans = last = 0meetings.sort()for l, r in meetings:if l > last + 1:ans += l - last - 1last = max(last, r)ans += days - lastreturn ans
Java
/** @Author: LetMeFly* @Date: 2025-07-11 23:25:31* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-07-12 16:58:44*/
import java.util.Arrays;class Solution {public int countDays(int days, int[][] meetings) {int ans = 0;int last = 0;Arrays.sort(meetings, (a, b) -> a[0] - b[0]);for (int[] me : meetings) {if (me[0] > last + 1) {ans += me[0] - last - 1;}last = Math.max(last, me[1]);}ans += days - last;return ans;}
}
Go
/** @Author: LetMeFly* @Date: 2025-07-11 23:25:31* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-07-12 17:00:47*/
package mainimport "slices"func countDays(days int, meetings [][]int) (ans int) {last := 0slices.SortFunc(meetings, func(a, b []int) int {return a[0] - b[0]})for _, me := range meetings {if me[0] > last + 1 {ans += me[0] - last - 1}last = max(last, me[1])}ans += days - lastreturn
}

同步發文于CSDN和我的個人博客,原創不易,轉載經作者同意后請附上原文鏈接哦~

千篇源碼題解已開源

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88585.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VUE3 el-table 主子表 顯示

在Vue 3中&#xff0c;實現主子表&#xff08;主從表&#xff09;的顯示通常涉及到兩個組件&#xff1a;一個是主表&#xff08;Master Table&#xff09;&#xff0c;另一個是子表&#xff08;Detail Table&#xff09;。我們可以使用el-table組件來實現這一功能。這里&#x…

張量數值計算

一.前言前面我們介紹了一下pytorch還有張量的創建&#xff0c;而本章節我們就來介紹一下張量的計算&#xff0c;類型轉換以及操作&#xff0c;這個是十分重要的&#xff0c;我們的學習目標是&#xff1a;掌握張量基本運算、掌握阿達瑪積、點積運算 掌握PyTorch指定運算設備。Py…

部署項目頻繁掉線-----Java 進程在云服務器內存不足被 OOM Killer 頻繁殺死-----如何解決?

一、查詢系統日志grep -i "java" /var/log/messages執行這條命令&#xff0c;檢查系統日志里是否有 Java 進程被 OOM Killer 殺死的記錄。日志中反復出現以下內容&#xff1a;Out of memory: Killed process 3679325 (java) total-vm:2947000kB, anon-rss:406604kB..…

【保姆級教程】基于anji-plus-captcha實現行為驗證碼(滑動拼圖+點選文字),前后端完整代碼奉上!

前言 驗證碼作為Web應用的第一道安全防線&#xff0c;其重要性不言而喻。但你是否還在為以下問題煩惱&#xff1a; 傳統字符驗證碼用戶體驗差&#xff0c;識別率低&#xff1f;驗證碼安全性不足&#xff0c;輕易被爬蟲破解&#xff1f;前后端對接繁瑣&#xff0c;集成效率低&…

HTML-八股

1、DOM和BOM DOM是表示HTML或者XML文檔的標準的對象模型&#xff0c;將文檔中每個組件&#xff08;元素、屬性等&#xff09;都作為一個對象&#xff0c;使用JS來操作這個對象&#xff0c;從而動態改變頁面內容&#xff0c;結合等。 DOM是以樹型結構組織文檔內容&#xff0c;樹…

ADI的EV-21569-SOM核心板和主板轉接卡的鏈接說明

ADI提供給客戶很多DSP的核心板&#xff0c;比如EV-21569-SOM&#xff0c;EV-21593-SOM&#xff0c;EV-SC594-SOM等&#xff0c;非常多&#xff0c;但是沒有底板&#xff0c;光一個核心板怎么用呢&#xff1f;于是我就在想&#xff0c;我的21569評估板就有通用底板&#xff0c;能…

基于 Redisson 實現分布式系統下的接口限流

在高并發場景下&#xff0c;接口限流是保障系統穩定性的重要手段。常見的限流算法有漏桶算法、令牌桶算法等&#xff0c;而單機模式的限流方案在分布式集群環境下往往失效。本文將介紹如何利用 Redisson 結合 Redis 實現分布式環境下的接口限流&#xff0c;確保集群中所有節點的…

ubuntu播放rosbag包(可鼠標交互)

1 前言 眾所周知&#xff0c;ubuntu中播放bag包最主要的工具是rviz&#xff0c;然而rviz有一個無法忍受的缺陷就是不支持鼠標回滾&#xff0c;并且顯示的時間的ros時間&#xff0c;不是世界時間&#xff0c;因此在遇到相關bug時不能與對應的世界時間對應。基于以上&#xff0c…

一文理解緩存的本質:分層架構、原理對比與實戰精粹

&#x1f4d6; 推薦閱讀&#xff1a;《Yocto項目實戰教程:高效定制嵌入式Linux系統》 &#x1f3a5; 更多學習視頻請關注 B 站&#xff1a;嵌入式Jerry 一文理解緩存的本質&#xff1a;分層架構、原理對比與實戰精粹 “緩存讓系統飛起來”——但每一層緩存有何不同&#xff1f;…

【離線數倉項目】——電商域DIM層開發實戰

摘要本文主要介紹了電商域離線數倉項目中DIM層的開發實戰。首先闡述了DIM層的簡介、作用、設計特征、典型維度分類以及交易支付場景下的表示例和客戶維度表設計。接著介紹了DIM層設計規范&#xff0c;包括表結構設計規范、數據處理規范以及常見要求規范。然后詳細講解了DIM層的…

Unreal Engine 自動設置圖像

void UYtGameSettingSubsystem::RunHardwareBenchmark(int32 WorkScale, float CPUMultiplier, float GPUMultiplier) {UGameUserSettings* UserSettings UGameUserSettings::GetGameUserSettings();if (UserSettings){// 運行基準測試&#xff08;異步操作&#xff0c;可能需…

使用Spring Boot和PageHelper實現數據分頁

在Spring Boot項目中&#xff0c;利用PageHelper插件可以輕松實現數據分頁功能。以下是具體的實現步驟和代碼示例。添加依賴在項目的pom.xml文件中添加PageHelper和MyBatis的依賴。<dependency><groupId>com.github.pagehelper</groupId><artifactId>p…

【IT-Infra】從ITIL到CMDB,配置管理,資產管理,物理機與設備管理(含Infra系列說明)

【IT-Infra】從ITIL到CMDB&#xff0c;配置管理&#xff0c;資產管理&#xff0c;物理機與設備管理&#xff08;含Infra系列說明&#xff09; 文章目錄序&#xff1a;Infra系列說明1、ITIL 信息技術基礎架構庫&#xff08;起源&#xff09;2、CMDB 配置管理數據庫&#xff08;I…

vue使用printJS實現批量打印及單個打印 避免空白頁

本文介紹了使用print-js庫實現批量打印功能的實現方法。通過安裝print-js依賴后,創建一個batchPrintAction方法,該方法接收選中行數據,生成包含多個標簽頁的HTML字符串。每個標簽頁以表格形式展示6個數據字段,并設置了80mm50mm的標簽尺寸。方法使用PrintJS進行打印,配置了…

C++ 選擇排序、冒泡排序、插入排序

選擇排序&#xff1a;是一種簡單直觀的排序算法&#xff0c;每次均是選擇最小&#xff08;大&#xff09;的元素進行排序。選擇排序算法思想&#xff1a;1 在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置2 再從剩余未排序元素中繼…

Linux入門篇學習——Linux 編寫第一個自己的命令,make 工具和 makefile 文件

目錄 一、Linux 編寫第一個自己的命令 1.命令的概念 2.定義一個自己的命令 二、make 工具和 makefile 文件 1.使用 make 工具 2.makefile文件 一、Linux 編寫第一個自己的命令 1.命令的概念 命令就是可執行程序。 比如說我們輸入 ls -al &#xff0c;ls 就是可執行程序的…

實驗一 接蘋果

主要步驟蘋果樹制作&#xff08;蘋果與籃子的制作同理&#xff09;為蘋果添加標簽相機位置設置與游戲面板長寬比設置&#xff08;16:9&#xff09;蘋果下落設置&#xff08;將蘋果從平拋運動改為垂直下落&#xff09;通過設置物理圖層并更改碰撞矩陣表實現通過PlayerPrefs實現游…

Nginx服務器集群:橫向擴展與集群解決方案

橫向擴展&#xff1a;基礎概念 在深入了解Nginx的橫向擴展細節之前&#xff0c;首先理解橫向擴展的含義及其重要性。橫向擴展是指通過增加服務器數量來分散負載并提升整體性能。這與縱向擴展形成對比&#xff0c;縱向擴展是指在單個服務器上增加更多資源&#xff08;如CPU、內…

缺陷的生命周期(Bug Life Cycle)是什么?

一、缺陷生命周期的定義缺陷生命周期是指一個Bug從被發現到最終關閉的完整流程&#xff0c;反映了缺陷在不同角色&#xff08;測試、開發、產品等&#xff09;間的流轉狀態。它是軟件測試流程的核心管理模型&#xff0c;直接影響團隊協作效率。二、標準缺陷生命周期階段以下是通…

AtCoder Beginner Contest 333(A,B,C,D,E,F)

AtCoder Beginner Contest 333 A 題意 輸出n個n(n<9) 代碼 #include<bits/stdc.h> using namespace std; void solve(){int n;cin>>n;for(int i1;i<n;i)cout<<n; } signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__1;//cin…