算法每日一题:一周中的第几天 | 日历类题目

大家好,我是星恒,已经连续5天没有发每日一题了,其实我每天都有写帖子的草稿,但是这几天学校考试,总是着急的写完就去看专业课了,一直没机会发出来,所以趁着这几天元旦休息,就一下将前面几天的每日一题发出来啦!

今天的每日一题又是简单题,难道快过元旦了,leetcode官方要给咱们力扣人放假了吗,哈哈😄

这次的题目是有关年月日的,如果大家没做过这类型的题,这道题还是值得一看的;好,话不多说,我们直接开始!

题目:leetcode 1185

给你一个整数数组 prices ,它表示一个商店里若干巧克力的价格。同时给你一个整数 money ,表示你一开始拥有的钱数。

你必须购买 **恰好 **两块巧克力,而且剩余的钱数必须是 非负数 。同时你想最小化购买两块巧克力的总花费。

请你返回在购买两块巧克力后,最多能剩下多少钱。如果购买任意两块巧克力都超过了你拥有的钱,请你返回 money 。注意剩余钱数必须是非负数。

示例:
示例 1:

复制代码
输入:prices = [1,2,2], money = 3
输出:0
解释:分别购买价格为 1 和 2 的巧克力。你剩下 3 - 3 = 0 块钱。所以我们返回 0 。

示例 2:

复制代码
输入:prices = [3,2,3], money = 3
输出:3
解释:购买任意 2 块巧克力都会超过你拥有的钱数,所以我们返回 3 。

提示:

  • 2 <= prices.length <= 50
  • 1 <= pricesi <= 100
  • 1 <= money <= 100

分析:

思路就是算出现在到1971年有多少天,然后和7取余(当然,这里是将总天数为1971的附近几天的周一再取余),这样就做出来啦

具体思路就是 :

  1. 先算当前年之前的年份天数
  2. 再算当前月份之前月份的天数
  3. 最后加上本月份的天数

这道题目本身很简单,不过需要注意以下几个点(也是做日历题的经验):

  • 会使用数组来记录周和月份天数
  • 敢通过日历经验来做题(比如年的天数,1971 - 2100之间没有特殊的情况:是4的倍数但不是闰年)
  • 本年闰年的判断(主要是要将本年给单拎出来,因为他的月份可能不包含2)

题解:

java 复制代码
class Solution {
    public String dayOfTheWeek(int day, int month, int year) {
        String[] week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        /* 输入年份之前的年份的天数贡献 */
        int days = 365 * (year - 1971) + (year - 1969) / 4;
        /* 输入年份中,输入月份之前的月份的天数贡献 */
        for (int i = 0; i < month - 1; ++i) {
            days += monthDays[i];
        }
        if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {
            days += 1;
        }
        /* 输入月份中的天数贡献 */
        days += day;
        return week[(days + 3) % 7];
    }
}

如果大家有什么思考和问题,可以在评论区讨论,也可以私信我,很乐意为大家效劳。

好啦,今天的每日一题到这里就结束了,如果大家觉得有用,可以可以给我一个小小的赞呢,我们下期再见!

相关推荐
敲代码的嘎仔5 小时前
用 Redis 合并写 + DelayQueue 延迟检测,把视频播放进度写库频率降到 1/60
java·开发语言·数据库·redis·缓存·音视频·高并发
Q26433650235 小时前
【有源码】基于机器学习的电信网络诈骗话术语义识别与可视化分析系统 XGBoost算法+Hadoop+Spark
大数据·hadoop·算法·机器学习·spark·毕业设计·课程设计
爱吃苹果的日记本5 小时前
数据结构第三课补充(空间复杂度)
数据结构·学习
不会就选b6 小时前
算法日常・每日刷题--贪心<11>
算法·leetcode·职场和发展
多弗朗皮卡丘6 小时前
数据结构6:队列
c语言·数据结构
千里码aicood6 小时前
面向电商冷启动与数据稀疏性的协同过滤算法优化研究
大数据·算法·协同过滤
xxxiugou1236 小时前
双指针解题秘籍:从入门到精通
c语言·数据结构·c++·算法
能源革命6 小时前
TimesFM(Time Series Foundation Model)介绍
算法·能源
youyou-06066 小时前
AUTOSAR‑COM 常见问题 QA (1)
java·linux·服务器·单片机·汽车
谢亮_vipxieliang6 小时前
ValidX时间段验证详解:ISO 8601标准与简化格式
java·spring boot·后端·spring·spring cloud·hibernate