LeetCode 每日一题 Day 28293031 ||三则模拟||找循环节(hard)

news2024/12/23 14:45:18

1185. 一周中的第几天

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:day、month 和 year,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。

示例 1:

输入:day = 31, month = 8, year = 2019
输出:“Saturday”
示例 2:

输入:day = 18, month = 7, year = 1999
输出:“Sunday”
示例 3:

输入:day = 15, month = 8, year = 1993
输出:“Sunday”

提示:

给出的日期一定是在 1971 到 2100 年之间的有效日期。

年底的简单模拟题:

class Solution {
public:
    string dayOfTheWeek(int day, int month, int year) {
        // 1971年1月1日是星期五
        int knownDayOfWeek = 5;

        // 月份天数表,注意2月份需要根据闰年来确定天数
        int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            daysInMonth[2] = 29; // 闰年2月有29天
        }

        // 累计天数
        int totalDays = 0;
        for (int y = 1971; y < year; ++y) {
            totalDays += 365;
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
                totalDays++; // 闰年多加一天
            }
        }

        for (int m = 1; m < month; ++m) {
            totalDays += daysInMonth[m];
        }

        totalDays += day - 1; // 减去1,因为日期从1开始

        // 计算星期几
        int dayOfWeek = (knownDayOfWeek + totalDays) % 7;

        // 星期几的映射
        std::string daysOfWeek[] = {"Friday",  "Saturday",  "Sunday",  "Monday",
                                    "Tuesday", "Wednesday", "Thursday"};

        return daysOfWeek[dayOfWeek];
    }
};

1154. 一年中的第几天

给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。

示例 1:

输入:date = “2019-01-09”
输出:9
解释:给定日期是2019年的第九天。
示例 2:

输入:date = “2019-02-10”
输出:41

提示:

date.length == 10
date[4] == date[7] == ‘-’,其他的 date[i] 都是数字
date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日

class Solution {
public:
    int dayOfYear(string date) {
        int year = stoi(date.substr(0, 4));
        int month = stoi(date.substr(5, 2));
        int day = stoi(date.substr(8, 2));

        int amount[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            ++amount[1];
        }

        int ans = 0;
        for (int i = 0; i < month - 1; ++i) {
            ans += amount[i];
        }
        return ans + day;
    }
};

该题同样是模拟,掌握stoi的使用即可,当然也可以前缀和解决。

1599. 经营摩天轮的最大利润

你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。

给你一个长度为 n 的数组 customers , customers[i] 是在第 i 次轮转(下标从 0 开始)之前到达的新游客的数量。这也意味着你必须在新游客到来前轮转 i 次。每位游客在登上离地面最近的座舱前都会支付登舱成本 boardingCost ,一旦该座舱再次抵达地面,他们就会离开座舱结束游玩。

你可以随时停下摩天轮,即便是 在服务所有游客之前 。如果你决定停止运营摩天轮,为了保证所有游客安全着陆,将免费进行所有后续轮转 。注意,如果有超过 4 位游客在等摩天轮,那么只有 4 位游客可以登上摩天轮,其余的需要等待 下一次轮转 。

返回最大化利润所需执行的 最小轮转次数 。 如果不存在利润为正的方案,则返回 -1 。

示例 1:

在这里插入图片描述

输入:customers = [8,3], boardingCost = 5, runningCost = 6
输出:3
解释:座舱上标注的数字是该座舱的当前游客数。

  1. 8 位游客抵达,4 位登舱,4 位等待下一舱,摩天轮轮转。当前利润为 4 * $5 - 1 * $6 = $14 。
  2. 3 位游客抵达,4 位在等待的游客登舱,其他 3 位等待,摩天轮轮转。当前利润为 8 * $5 - 2 * $6 = $28 。
  3. 最后 3 位游客登舱,摩天轮轮转。当前利润为 11 * $5 - 3 * $6 = $37 。
    轮转 3 次得到最大利润,最大利润为 $37 。

示例 2:

输入:customers = [10,9,6], boardingCost = 6, runningCost = 4
输出:7
解释:

  1. 10 位游客抵达,4 位登舱,6 位等待下一舱,摩天轮轮转。当前利润为 4 * $6 - 1 * $4 = $20 。
  2. 9 位游客抵达,4 位登舱,11 位等待(2 位是先前就在等待的,9 位新加入等待的),摩天轮轮转。当前利润为 8 * $6 - 2 * $4 = $40 。
  3. 最后 6 位游客抵达,4 位登舱,13 位等待,摩天轮轮转。当前利润为 12 * $6 - 3 * $4 = $60 。
  4. 4 位登舱,9 位等待,摩天轮轮转。当前利润为 * $6 - 4 * $4 = $80 。
  5. 4 位登舱,5 位等待,摩天轮轮转。当前利润为 20 * $6 - 5 * $4 = $100 。
  6. 4 位登舱,1 位等待,摩天轮轮转。当前利润为 24 * $6 - 6 * $4 = $120 。
  7. 1 位登舱,摩天轮轮转。当前利润为 25 * $6 - 7 * $4 = $122 。
    轮转 7 次得到最大利润,最大利润为$122 。

示例 3:

输入:customers = [3,4,0,5,1], boardingCost = 1, runningCost = 92
输出:-1
解释:

  1. 3 位游客抵达,3 位登舱,0 位等待,摩天轮轮转。当前利润为 3 * $1 - 1 * $92 = -$89 。
  2. 4 位游客抵达,4 位登舱,0 位等待,摩天轮轮转。当前利润为 7 * $1 - 2 * $92 = -$177 。
  3. 0 位游客抵达,0 位登舱,0 位等待,摩天轮轮转。当前利润为 7 * $1 - 3 * $92 = -$269 。
  4. 5 位游客抵达,4 位登舱,1 位等待,摩天轮轮转。当前利润为 11 * $1 - 4 * $92 = -$357 。
  5. 1 位游客抵达,2 位登舱,0 位等待,摩天轮轮转。当前利润为 13 * $1 - 5 * $92 = -$447 。
    利润永不为正,所以返回 -1 。

提示:

n == customers.length
1 <= n <= 105
0 <= customers[i] <= 50
1 <= boardingCost, runningCost <= 100

题目虽然长,但是逻辑很清晰,我们直接模拟计算即可:

class Solution {
public:
    int minOperationsMaxProfit(vector<int>& customers, int boardingCost, int runningCost) {
        int ans = -1;
        int mx = 0, t = 0;
        int wait = 0, i = 0;
        while (wait || i < customers.size()) {
            wait += i < customers.size() ? customers[i] : 0;
            int up = min(4, wait);
            wait -= up;
            ++i;
            t += up * boardingCost - runningCost;
            if (t > mx) {
                mx = t;
                ans = i;
            }
        }
        return ans;
    }
};

466. 统计重复个数(hard)

这个题实在是不会做,加上这两周在准备考试,草草看了题解就去复习了,等放假后细补:


class Solution {
public:
    int getMaxRepetitions(string s1, int n1, string s2, int n2) {
        if (n1 == 0)
        {
            return 0;
        }

        int ns1 = s1.size();
        int ns2 = s2.size();

        // s1和s2重复出现的数量
        int s1cnt = 0;
        int s2cnt = 0;
        // s2里的编号 i2
        int i2 = 0;

        // i 映射到 s1cnt, s2cnt
        unordered_map<int, pair<int,int>> i2cnt;

        while (true)
        {
            ++s1cnt;
            // 遍历一个s1
            for (char c : s1)
            {
                if (c == s2[i2])
                {
                    ++i2;
                    // 完成一个s2的匹配
                    if (i2 == ns2)
                    {
                        ++s2cnt;
                        // 要重新计数回到s2的编号0
                        i2 = 0;
                    }
                }
            }

            // 发现s1的n1都用完了,依然找不到, 直接计算返回
            if (s1cnt == n1)
            {
                return s2cnt / n2;
            }

            // 找到之前循环的i2,那么就可以循环计算了
            if (i2cnt.find(i2) != i2cnt.end())
            {
                int s1cntPre = i2cnt[i2].first;
                int s2cntPre = i2cnt[i2].second;
                // 开始估算
                // (已经得到 s2cnt 的数量) + (剩下数量可以构建重复的 s2cnt 数量)
                int res = s2cntPre + (n1 - s1cntPre)/(s1cnt-s1cntPre) * (s2cnt - s2cntPre);
                // cout << s1cntPre <<","<<s2cntPre << " " << (s1cnt-s1cntPre) <<","<< (s2cnt - s2cntPre) <<":"<< res << endl;
                // 剩下数量不足s1cntPre的则继续遍历
                int nRest = (n1 - s1cntPre) % (s1cnt-s1cntPre);
                for (int i = 0; i < nRest; ++i)
                {
                    for (char c : s1)
                    {
                        if (c == s2[i2])
                        {
                            ++i2;
                            if (i2 == ns2)
                            {
                                ++res;
                                i2 = 0;
                            }
                        }
                    }
                }
                // 最后需要除以 n2 才是真正结果
                return res / n2;
            }
            else
            {
                i2cnt[i2] = {s1cnt, s2cnt};
            }
        }

        return 0;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cam4DOcc: 基于摄像头的4D占据网格预测的自动驾驶应用

文章&#xff1a;Cam4DOcc: Benchmark for Camera-Only 4D Occupancy Forecasting in Autonomous Driving Applications 作者&#xff1a;Junyi Ma, Xieyuanli Chen , Jiawei Huang, Jingyi Xu, Zhen Luo, Jintao Xu, Weihao Gu, Rui Ai, Hesheng Wang 编辑&#xff1a;点云P…

Python高效编程:十招实用技巧大揭秘!

文章目录 1\. 代码优化与高效数据结构2\. 列表推导式和生成器表达式3\. 使用装饰器和上下文管理器4\. 多线程和多进程5\. 函数式编程和Lambda函数6\. 内置模块与标准库7\. 文件处理与I/O操作8\. 调试和性能优化工具9\. 文档化与测试10\. 并发编程与异步技术总结Python技术资源分…

UE4.27.2 网页串流

1、和Unity串流一样安装Node.js 下载地址https://nodejs.org/ 2、下载安装Epic Games启动程序https://www.unrealengine.com/zh-CN/download 3、安装UE4.7.2 4、这里就不安装像素流送演示&#xff0c;选个别的然后创建工程 5、启用PixelStreaming插件 6、设置额外启动参数&am…

开发手机中控软件:从零开始的代码之旅!

在这个智能化风靡的时代&#xff0c;手机中控软件成为了许多人的梦想&#xff0c;通过一款软件&#xff0c;我们可以轻松地控制家中的各种智能设备&#xff0c;实现智能家居的美好愿景。 但是&#xff0c;开发手机中控软件并非易事&#xff0c;需要具备一定的编程知识和技能&a…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式&#xff0c;例如在时域中表现出平稳性的动态纹理模式&#xff0c;以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

paddle v4 hubserving 部署

环境准备&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7/deploy/hubserving#24-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1 服务器启动命令 hub serving start -c deploy/hubserving/ocr_system/config.json客户端请求 python tools/test_hubserving.…

境内深度合成服务算法备案清单(2023年12月)

截止2024年1月3日&#xff0c;第三批深度合成服务算法备案信息的公告尚未发布&#xff0c;预计将会在2024-1-10左右发布&#xff0c;我公司已知晓部分公示名单&#xff0c;如中国电信数字人生成算法&#xff0c;详情联系WX号&#xff1a;SuanfabeiandayuAI生成合成类算法应办理…

非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (实例篇 V)

Title: 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (实例篇 V) 姊妹博文 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (I) 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (II) 非线性最小二乘问题的数值方法 —— 从牛顿…

RPA如何入门?

许多人可能认为RPA等人工智能软件的入门非常困难&#xff0c;不知道该如何开始。作为一名刚接触RPA软件一年多的新手&#xff0c;回答这个问题也是对自己学习RPA历程的回顾。同时&#xff0c;这也是分享给那些打算学习RPA初学者的经验&#xff0c;希望可以帮助大家更好地、更迅…

SANSAN新鲜事|物联网平台就只能做数据监控吗?

​物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是指通过网络将各种物理设备、智能终端、传感器等连接起来&#xff0c;实现信息的交换和通信的技术。物联网平台&#xff08;IoT Platform&#xff09;是指为物联网应用提供基础设施、服务和工具的软件平…

【springboot配置文件加载源码分析】

在Spring Boot的源码中&#xff0c;配置文件的加载是在应用程序启动的早期阶段进行的。具体来说&#xff0c;配置文件加载的主要步骤发生在SpringApplication类的run()方法中的prepareEnvironment方法中&#xff0c;真正读取我们的配置文件还是PropertySourceLoader。 本篇博客…

RFID智能生产制造全周期管理系统

一、MES系统简述 RFID/条码技术基于的MES制造执行系统可以加强ERP/MRP计划的执行功能。该系统包括MES与ERP的对接、MES报表与看板、MES物料管理、MES设备与工具管理、MES品质管理和MES生产过程管理WIP等功能&#xff0c;通过将MES系统与ERP计划和车间作业现场控制系统联系起来…

【面试】面向对象编程的三大概念(实例辅助记忆)

【面试】面向对象编程的三大概念&#xff08;实例辅助记忆&#xff09; 虑面向对象编程的三大特性&#xff0c;它们是&#xff1a; 封装&#xff08;Encapsulation&#xff09;&#xff1a; 将对象的状态和行为封装在一起&#xff0c;对外部隐藏对象的内部实现细节。这样可以防…

第二部分组件化编程:vue学习(53-60)

文章目录 53.对组件的理解54 非单文件组件55 组件的几个注意事项56 组件的嵌套57 vuecomponent构造函数58 vue实例与组件实例59 一个重要的内置关系60 单文件组件 53.对组件的理解 左侧2个页面&#xff0c;如果要复用js和css的话&#xff0c;引用的路线十分混乱。使用js模块化&…

熔断、隔离、重试、降级、超时、限流,高可用架构流量治理核心策略全掌握

可用性的定义 在探讨高可用架构之前&#xff0c;让我们以 O2 系统为例&#xff0c;解释一下何谓可用性。O2 是腾讯内部的一个广告投放系统&#xff0c;专注于提升投放效率、分析广告效果&#xff0c;拥有自动化广告投放、AIGC 自动化素材生产等多种功能。 其整体架构概览如下&…

abaqus复合材料 19个实例

实例操作: 1.复合材料层结构的三种常用建模方法、静力分析中强度准则和损伤判据的引入、数据输入与输出 2.层合结构的热-力耦合分析 3.基于虚裂纹闭合技术(VCCT)的分层扩展模拟 4.基于cohesive单元的分层/界面损伤扩展模拟 5.基于XFEM方法的裂纹扩展模拟 6.复合材料加筋板…

在Go语言中实现HTTP请求的缓存

大家好&#xff0c;我是你们可爱的编程小助手&#xff0c;今天我们要一起探讨如何使用Go语言实现HTTP请求的缓存。听起来是不是很酷&#xff1f;让我们开始吧&#xff01; 首先&#xff0c;我们要明白什么是缓存。简单来说&#xff0c;缓存就是将数据存储在内存中&#xff0c;…

中国供应链,出海大时代

尽量优化、打通跨境电商每一个参与方的物流、商流、信息流、资金流是电商供应链出海的解题之法。这个过程中数智化便是打通这些节点的钥匙。 作者|斗斗 编辑|皮爷 出品|产业家 “速卖通加持&#xff0c;阿里国际零售商业收入同比上涨73%”“拼多多发布Q3财报同比增长94%…

STM32MP157/linux驱动学习记录

1. uboot烧录 2.linux安装nfs服务 sudo apt-get install nfs-kernel-server rpcbind安装nfs服务 在用户根目录下创建一个名为“linux”的文件夹&#xff0c;以后所有的东西都放到这个“linux”文件夹里面&#xff0c;在“linux”文件夹里面新建一个名为“nfs”的文件夹&#…

文件属性信息

文件的属性信息 Linux是一个基于文件的操作系统&#xff0c;因此作为文件本身也就有很多属性&#xff0c;如果想要查看某一个文件的属性有两种方式&#xff1a;命令和函数。虽然有两种方式但是它们对应的名字是相同的&#xff0c;叫做stat。另外使用file命令也可以查看文件的一…