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

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

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

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

相关推荐
逃逸线LOF5 小时前
服务网关Gateway
java·运维·gateway
灿飞屋6 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
武子康6 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
阡陌数智7 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全
zh_xuan7 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长7 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
早起CaiCai8 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
学长毕设8 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端
梦里寻码9 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
SL_staff9 小时前
离散制造排程破局:JVS-APS 四步闭环落地实践(开发者视角)
java·产品·全栈