(LeetCode 每日一题) 3169. 无需开会的工作日 ( 排序+贪心 )
题目:3169. 无需开会的工作日
思路:排序+贪心。时间复杂度0(nlogn)。
先将会议按开始时间升序排序,然后遍历每一个会议,维护还没被统计过的空闲日子last
C++版本:
class Solution {
public:int countDays(int days, vector<vector<int>>& meetings) {// 将会议按开始时间升序排序sort(meetings.begin(),meetings.end());// 还没被统计过的空闲日子int last=1;// 答案int sum=0;for(auto x:meetings){sum+=max(x[0]-last,0);// 维护还没被统计过的空闲日子last=max(last,x[1]+1);}//别忘记最后一天sum+=days+1-last;return sum;}
};
JAVA版本:
class Solution {public int countDays(int days, int[][] meetings) {Arrays.sort(meetings,(a,b)-> a[0]-b[0]);int last=1;int sum=0;for(var x:meetings){sum+=Math.max(x[0]-last,0);last=Math.max(last,x[1]+1);}sum+=days+1-last;return sum;}
}
GO版本:
func countDays(days int, meetings [][]int) int {sum,last:=0,1sort.Slice(meetings, func(i,j int) bool{return meetings[i][0]<meetings[j][0]})for _,x:=range meetings {sum+=max(x[0]-last,0)last=max(x[1]+1,last)}sum+=days+1-lastreturn sum
}