【每日一题】一周中的第几天

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:模拟
  • 写在最后

Tag

【模拟】【数学】【2023-12-30】


题目来源

1185. 一周中的第几天


解题思路

方法一:模拟

思路

题目中的日期是在 19712100 年之间的有效日期,即 1971-01-012100-12-31 范围内的任意日期。我们需要选定一个标准,将题目中给的日期和这个标准比较来得到给定的日期是一周中的周几。

这个比较的标准选择为 1970-12-31

比较首先需要计算给定的日期距离 1970-12-31 的天数 days,分三部分来计算:

  • 给定的年 year 距离 1970 的年数对天数的贡献,注意每四年就会有闰年出现;
  • 给定的月份之前的月份对天数的贡献,这部分也要考虑闰年对天数的影响;
  • 给定的月份中的天数贡献。

为了方便根据 days 来索引,建立一个数组 weeks = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"},最后返回 weeks[(day % 7 + 3) % 7] 即可。

算法

在具体实现中,需要判断给定的年份是不是闰年,有以下函数进行判断:

bool isLeapYear(int year) {if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {return false;}return true;
}

提交代码

class Solution {
public:string dayOfTheWeek(int day, int month, int year) {vector<string> weeks{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};vector<int> months{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// year 之前的整年的贡献天数int days = (year - 1971) * 365 + (year - 1969) / 4; // 这个1969就很妙// year年月份的贡献天数for(int i = 1; i < month; ++i){days += months[i];}// year 对 day 的贡献天数if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {days += 1;}days += day;return weeks[(days % 7 + 3) % 7]; // (days % 7 + 3) % 7 化简之后为 (days + 3) % 7}
};

复杂度分析

时间复杂度: O ( C ) O(C) O(C),其中 C C C 为一年中的月份数 12。仅需常量时间的数学计算。

空间复杂度: O ( C ) O(C) O(C),其中 C C C 为一年中的月份数 12。仅需常量时间的数学计算。


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/308741.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试/测试开发丨Windows系统chromedriver安装与环境变量配置

一、selenium 环境配置 1、chrome 浏览器的安装与配置 目前比较常用的浏览器是 Google Chrome 浏览器&#xff0c;所以本教程以 chrome 为主&#xff0c;后面简介一下其他浏览器的环境配置。 &#xff08;1&#xff09;chrome 下载: www.google.cn/chrome/ &#xff08;2&a…

【Linux系统编程二十五】:线程概念(Linux中的轻量级进程)

【Linux系统编程二十五】&#xff1a;线程概念(Linux中的轻量级进程&#xff09; 一.线程的概念1.地址空间是资源窗口 二.线程初步理解1.进程执行分支(内部运行)2.执行粒度更细3.重构进程概念&#xff1a;系统资源分配的基本实体4.重构线程概念&#xff1a;系统调度的基本单位5…

Gin 源码深度解析及实现

介绍 什么是 gin &#xff1f; 一个轻量级高性能 HTTP Web 框架。 Introduction | Gin Web Framework (gin-gonic.com) Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。 为什么使用 gin &#xff1f; In…

修改源码,element的el-table合并,处理合并产生的hover样式问题

1、确认自己element-ui的版本号 2、此element-ui下的lib包是修改过hover样式的包,如何替换自己文件下的node_modules中的包 修改后将lib文件夹中文件替换你项目中/node_module/element-ui/Lib中的文件问题??如果替换开发环境中的node_module的包无法升级到测试环境,因为nod…

golang 图片加水印

需求&#xff1a; 1&#xff0c;员工签到图片加水印 2&#xff0c;水印文字需要有半透明的底色&#xff0c;避免水印看不清 3&#xff0c;图片宽设置在600&#xff0c;小于600或者大于600都需要等比例修改图片的高度&#xff0c;保持水印在图片中的大小和位置 4&#xff0c;处理…

使用Vscode远程debug报错找不到Module找不到File

1..报第一个错 提示我无法导入自己写的module 如图&#xff1a; 解决办法&#xff1a; stackoverflow上说的在launch.json中加了一条 env&#xff0c;就解决了。 "env": { "PYTHONPATH":"/home/zt/ge-sc-master/ge-sc-master"}, 2.解决完第一个…

Linux系统中CPU使用率概念与计算方法

CPU使用率 CPU使用率定义&#xff1a; CPU 使用率是单位时间内 CPU 使用情况的统计&#xff0c;以百分比的方式展示。CPU 使用率是最常用来描述系统CPU 性能的指标。 Linux 作为一个多任务操作系统&#xff0c;将每个 CPU 的时间划分为很短的时间片&#xff0c;再通过调度器轮…

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)

1、堆叠注入 使用分号 ; 成堆的执行sql语句 以sqllabs-less-38为例 ?id1 简单测试发现闭合点为单引号 ?id1 order by 3 ?id1 order by 4使用order by探测发现只有三列&#xff08;字段数&#xff09; 尝试简单的联合注入查询 ?id-1 union select 1,database(),user()-…

GroundingDINO-根据文本提示检测任意目标

1. 背景介绍 GroundingDINO是一种新的SOTA零样本物体检测模型。在这篇文章中&#xff0c;我们将讨论Grounding DINO模型的优势&#xff0c;分析其具体的模型架构&#xff0c;并提供真实的测试样例。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2.零样本目标检测 大多…

IC入门必备!数字IC中后端设计实现全流程解析(1.3万字长文)

吾爱IC社区自2018年2月份开始在公众号上开始分享数字IC后端设计实现相关基础理论和实战项目经验&#xff0c;累计输出文字超1000万字。全部是小编一个个字敲出来的&#xff0c;绝对没有复制粘贴的情况&#xff0c;此处小编自己得给自己鼓鼓掌鼓励下自己。人生不要给自己设限&am…

【Mode Management】EcuM模块详细介绍

目录 1.功能概述 2.关键概念理解 3.EcuM模块对其他模块的依赖 3.1Mcu模块 3.2具有唤醒能力外设模块 3.3操作系统OS 3.4BSW调度器 3.5BswM模块 3.6应用软件组件SWC 3.7小结 4.EcuM模块的各个阶段介绍 4.1 STARTUP阶段 4.2 UP Phase阶段 4.3 SHUTDOWN阶段 4.4 SLE…

LeetCode 刷题日志

文章目录 1954. 收集足够苹果的最小花园周长思考&#xff1a;暴力枚举代码实现二分查找代码实现 1954. 收集足够苹果的最小花园周长 1954. 收集足够苹果的最小花园周长 难度&#xff1a; 中等 题目大意&#xff1a; 给你一个用无限二维网格表示的花园&#xff0c;每一个 整…