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

大家好,我是星恒,已经连续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];
    }
}

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

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

相关推荐
SamDeepThinking1 小时前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
vivo互联网技术1 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
朕瞧着你甚好2 小时前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
浮生望2 小时前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰2 小时前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
MacroZheng3 小时前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端
SamDeepThinking3 小时前
函数式编程:用BiFunction消除多类型分支的代码重复
java·后端·面试
地平线开发者13 小时前
J6B vio scenario sample
算法
Flittly20 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring