首页 > 其他分享 >leetcode 6184. 统计共同度过的日子数

leetcode 6184. 统计共同度过的日子数

时间:2022-09-18 16:37:51浏览次数:86  
标签:31 30 Alice 日期 6184 度过 Bob arriveBob leetcode

leetcode 6184. 统计共同度过的日子数

题目描述

Alice 和 Bob 计划分别去罗马开会。

给你四个字符串 arriveAlice ,leaveAlice ,arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里(日期为闭区间),而 Bob 在日期 arriveBob 到 leaveBob 之间在城市里(日期为闭区间)。每个字符串都包含 5 个字符,格式为 "MM-DD" ,对应着一个日期的月和日。

请你返回 Alice和 Bob 同时在罗马的天数。

你可以假设所有日期都在 同一个 自然年,而且 不是 闰年。每个月份的天数分别为:[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 。

实例1

输入:arriveAlice = "08-15", leaveAlice = "08-18", arriveBob = "08-16", leaveBob = "08-19"
输出:3
解释:Alice 从 8 月 15 号到 8 月 18 号在罗马。Bob 从 8 月 16 号到 8 月 19 号在罗马,他们同时在罗马的日期为 8 月 16、17 和 18 号。所以答案为 3 。

实例2

输入:arriveAlice = "10-01", leaveAlice = "10-31", arriveBob = "11-01", leaveBob = "12-31"
输出:0
解释:Alice 和 Bob 没有同时在罗马的日子,所以我们返回 0 。

提示

所有日期的格式均为 "MM-DD" 。
Alice 和 Bob 的到达日期都 早于或等于 他们的离开日期。
题目测试用例所给出的日期均为 非闰年 的有效日期。

题目思路

将到达和离开的日期换成天数,再根据共同区间日期的思想公式解决 date = MAX{ 0 , MIN(c , d) - MAX(a , b)}(后面的最小值减去前面的最大值日期) 。

class Solution {
public:

    int months[13]{0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int getString(string s)
    {
        int a,b,res = 0;
        sscanf(s.c_str(),"%d-%d",&a,&b);
        for(int i=1;i<a;i++)
            res+=months[i];
        return res+b;
    }

    int countDaysTogether(string arriveAlice, string leaveAlice, string arriveBob, string leaveBob) {
        int a = getString(arriveAlice);
        int b = getString(leaveAlice);
        int c = getString(arriveBob);
        int d = getString(leaveBob);

        return max(0,min(b,d)-max(a,c)+1);
    }
};

标签:31,30,Alice,日期,6184,度过,Bob,arriveBob,leetcode
From: https://www.cnblogs.com/fsh001/p/16705116.html

相关文章

  • [LeetCode] 2007. Find Original Array From Doubled Array
    Anintegerarray original istransformedintoa doubled array changed byappending twicethevalue ofeveryelementin original,andthenrandomly sh......
  • 【Leetcode】64. 最小路径和
    题目(链接)给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例1:输入:grid=......
  • [leetcode 876] 链表的中间节点
    [leetcode876]链表的中间节点给定一个头结点为head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:[1,2,3,4,5]输出:此列......
  • Leetcode 1707 与数组中元素的最大异或值
    1707.与数组中元素的最大异或值难度困难  给你一个由非负整数组成的数组nums。另有一个查询数组queries,其中queries[i]=[xi,mi]。第i个查询的答案是xi......
  • Leetcode 907 子数组的最小值之和
    给定一个整数数组arr,找到min(b) 的总和,其中b的范围为arr的每个(连续)子数组。由于答案可能很大,因此返回答案模10^9+7。 示例1:输入:arr=[3,1,2,4]输出:17解......
  • leetcode 101. Symmetric Tree 对称二叉树(简单)
    一、题目大意给你一个二叉树的根节点root,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false......
  • leetcode 1385. 两个数组间的距离值
    给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 ......
  • LeetCode 111 二叉树的最小深度
    后序遍历classSolution{public:intdfs(TreeNode*node){if(node==nullptr)return0;if(node->left==nullptr&&node->right!=nul......
  • leetcode-栈=20
    importjava.util.ArrayList;importjava.util.Stack;/**<p>给定一个只包括<code>'('</code>,<code>')'</code>,<code>'{'</code>,<code>'}'</code>,<code>'['......
  • LeetCode 101 对称二叉树
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(......