LeetCode[2409. 统计共同度过的日子数]
知识点1
区间求交问题,已知我们的区间1:[a,b],区间2:[c,d],那么区间1和区间2有交集部分的长度为多少呢?
我们有如下公式:max{0,min(b,d) - max(a,c) + 1}
知识点2
sscanf()函数
下面是 sscanf() 函数的声明。
int sscanf(const char *str, const char *format, ...)
s.c_str()这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。
这里就先记住,以后如果碰到相关的数据就这么处理
思路
- 那么本题我们先分别求出A的起始天数和A的到达天数,B的起始天数和B的到达天数
- 要计算天数,我们可以定义一个辅助函数
 
 - 随后我们利用如上公式即可完成
 
class Solution {
public:
    //求解日期问题,我们基本都会先定义这么一个数组
    int months[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    //辅助函数,用于将日期转化为天数
    int get(string s){
        int res = 0;
        int m,d;
        sscanf(s.c_str(),"%d-%d",&m,&d);//这个trick要记住呀!!!
        for(int i = 1; i < m; i++) res += months[i];
        return res + d;
    }
    int countDaysTogether(string arriveAlice, string leaveAlice, string arriveBob, string leaveBob) {
        int a = get(arriveAlice), b = get(leaveAlice);
        int c = get(arriveBob), d = get(leaveBob);
        return max(0,min(b,d) - max(a,c) + 1);
    }
};
    AI大三在读
                    
                
                
            
        
浙公网安备 33010602011771号