题目链接2409. 统计共同度过的日子数简单算法原理解法计算区间交集0ms击败100.00%时间复杂度O(1)将字符串的日期转换成在这一年的第几天那么问题就相当于求两个区间交集中的整数个数好比 [10,30] 与 [20,40] 的交集为 [20,30]区间内的整数个数为 30-20111计算左右端点left两区间左端点最大值right两区间右端点最小值交集中的个数为 right-left1当交集为空时答案为0用最大值去取值避免出现负数Java代码class Solution { //2409. 统计共同度过的日子数 private static final int[] daysPreSumnew 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 leftcalcDays(arriveAlice.compareTo(arriveBob)0?arriveAlice:arriveBob); int rightcalcDays(leaveAlice.compareTo(leaveBob)0?leaveAlice:leaveBob); //结果不能为负数 return Math.max(right-left1,0); } private int calcDays(String S){ char[] sS.toCharArray(); //取出月份s[0]s[1]是月 int month(s[0]-0)*10s[1]-0; //取出日期s[3]s[4]是日跳过中间的s[2]- int day(s[3]-0)*10s[4]-0; //daysPreSum[month-1]:前面(month-1)个月一共多少天再加上当月的day return daysPreSum[month-1]day; } }