☰
A.每日一题:2409. 统计共同度过的日子数
2026/11/3 10:40:05 网站建设 项目流程

题目链接:2409. 统计共同度过的日子数(简单)

算法原理:

解法:计算区间交集

0ms击败100.00%

时间复杂度O(1)

将字符串的日期转换成在这一年的第几天,那么问题就相当于求两个区间交集中的整数个数

好比 [10,30] 与 [20,40] 的交集为 [20,30],区间内的整数个数为 30-20+1==11

计算左右端点:

left:两区间左端点最大值

right:两区间右端点最小值

交集中的个数为 right-left+1

当交集为空时,答案为0,用最大值去取值,避免出现负数

Java代码:

class Solution { //2409. 统计共同度过的日子数 private static final int[] daysPreSum=new int[]{0,31,59,90,120,151,181,212,243,273,304,334,365}; public int countDaysTogether(String arriveAlice, String leaveAlice, String arriveBob, String leaveBob) { //重叠区间的起点 int left=calcDays(arriveAlice.compareTo(arriveBob)>0?arriveAlice:arriveBob); int right=calcDays(leaveAlice.compareTo(leaveBob)<0?leaveAlice:leaveBob); //结果不能为负数 return Math.max(right-left+1,0); } private int calcDays(String S){ char[] s=S.toCharArray(); //取出月份:s[0]s[1]是月 int month=(s[0]-'0')*10+s[1]-'0'; //取出日期:s[3]s[4]是日,跳过中间的s[2]="-" int day=(s[3]-'0')*10+s[4]-'0'; //daysPreSum[month-1]:前面(month-1)个月一共多少天,再加上当月的day return daysPreSum[month-1]+day; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询