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

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

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

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

相关推荐
2401_857439699 分钟前
企业OA管理系统:Spring Boot技术应用与优化
java·spring boot·后端
2401_857439699 分钟前
Spring Boot OA:构建企业级办公自动化平台
java·spring boot·后端
kitesxian20 分钟前
Leetcode207. 课程表(HOT100)
数据结构
明月*清风28 分钟前
【数据结构专栏】二叉搜索树(Binary Search Tree)的剖析?
开发语言·数据结构·c++·visualstudio
Beau_Will29 分钟前
数据结构-树状数组专题(2)
数据结构·c++·算法
paterWang31 分钟前
小程序-基于java+SpringBoot+Vue的农场管理系统设计与实现
java·spring boot·小程序
尘浮生1 小时前
Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)
java·数据库·spring boot·mysql·微信小程序·小程序·汽车
雪碧聊技术1 小时前
RabbitMQ3:Java客户端快速入门
java·开发语言·rabbitmq·amqp·spring amqp·rabbittemplate
济南信息学奥赛刘老师1 小时前
GESP考试大纲
开发语言·c++·算法·青少年编程
~yY…s<#>1 小时前
【刷题21】BFS解决FloodFill算法专题
数据结构·c++·算法·leetcode·宽度优先