【每日一题】递枕头

文章目录

Tag

【模拟】【 O ( 1 ) O(1) O(1) 公式】【2023-09-26】


题目来源

2582. 递枕头


题目解读

编号从 1nn 个人站成一排传递枕头。最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递方向就会改变,队伍会继续沿相反方向传递枕头。

给你两个正整数 ntime,返回 time 秒后拿着枕头的人的编号。


解题思路

方法一:模拟

直接模拟,一开始是从排头往后传递,枕头到达队尾就改变传递方向。我们可以使用一个 bool \textit{bool} bool 变量 flag 表示传递的方向,初始化为 true 表示从排头往后传递,传递到队尾或者队头是就改变传递方向即 flag = !flag

实现代码

class Solution {
public:int passThePillow(int n, int time) {int res = 1;bool flag = true;for (int i = 0; i < time; ++i) {res += flag == true ? 1 : -1;if (res == 1 | res == n) flag = !flag;}return res;}
};

复杂度分析

时间复杂度: O ( t i m e ) O(time) O(time)

空间复杂度: O ( 1 ) O(1) O(1)

方法二: O ( 1 ) O(1) O(1) 解法

方法一模拟的方法最容易想到,但是时间复杂度不是最优的。

枕头在一排中从排头传递到排尾需要 n-1 的时间,我们使用 l f l o o r t i m e n − 1 ⌋ lfloor \frac{time}{n-1} \rfloor lfloorn1time 来判断当前的传递是从排头到排尾的还是从排尾到排头的:

  • 如果 ⌊ t i m e n − 1 ⌋ \lfloor \frac{time}{n-1} \rfloor n1time 为偶数(包括 0), 说明在从排头到排尾即 1n 传递枕头,此时拿到枕头的人编号为 1 + time mod (n-1)
  • 如果 ⌊ t i m e n − 1 ⌋ \lfloor \frac{time}{n-1} \rfloor n1time 为奇数, 说明在排尾到排头即 n1 传递枕头,此时拿到枕头的人编号为 n - time mod (n-1)

实现代码

class Solution {
public:int passThePillow(int n, int time) {int t = time % (n-1);return time / (n -1) & 1 ? n -t : 1 + t;}
};

复杂度分析

时间复杂度: O ( 1 ) O(1) O(1)

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

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

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

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

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

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

相关文章

华南理工大学电子与信息学院23年预推免复试面试经验贴

运气较好&#xff0c;复试分数90.24&#xff0c;电科学硕分数线84、信通83、专硕电子与信息74. 面试流程&#xff1a; 1&#xff1a;5min ppt的介绍。其中前2min用英语简要介绍基本信息&#xff0c;后3min可用英语也可用中文 介绍具体项目信息如大创、科研、竞赛等&#xff08…

出现 conda虚拟环境默认放在C盘 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 方法一3.2 方法二1. 问题所示 通过conda配置虚拟环境的时候,由于安装在D盘下,但是配置的环境默认都给我放C盘 通过如下命令:conda env list,最后查看该环境的确在C盘下 2. 原理分析 究其根本原因,这是因为默认路径没有足够的…

编程每日一练(多语言实现):判断偶数

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现 一、实例描述 利用单条件单分支选择语句判断输入的一个整数 是否是偶数。 运行程序&#xff0c;输入一个 整数18&#xff0c; 然后按回车键&#xff0c;将提示该数字是偶数…

linux使用操作[2]

文章目录 版权声明网络传输ping命令wget命令curl命令端口linux端口端口命令和工具 进程管理查看进程关闭进程 主机状态top命令内容详解磁盘信息监控 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相…

Android ConstraintLayout app:layout_constraintHorizontal_weight

Android ConstraintLayout app:layout_constraintHorizontal_weight <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:…

【已解决】qt死活不响应鼠标移动到按钮事件

本博文源于笔者正在研究的内容&#xff0c;这个问题大概捣鼓了一个下午&#xff0c;问题是这样子&#xff1a;我有一个按钮&#xff0c;我应用程序运行时&#xff0c;我鼠标放到按钮上&#xff0c;按钮就会被填充图标。怀揣着这样一个想法&#xff0c;我搜啊搜&#xff0c;整啊…

verilog学习笔记(1)module实例化2

移位寄存器多路选择器 我的代码&#xff1a; module top_module ( input clk, input [7:0] d, input [1:0] sel, output [7:0] q );wire [7:0] w1;wire [7:0] w2;wire [7:0] w3;my_dff8 my_dff8_1(.clk(clk),.d(d),.q(w1));my_dff8 my_dff8_2(.clk(clk),.d(w1),.q(w2));my_d…

前端知识总结

在前端开发中&#xff0c;y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1&#xff0c;并将自增后的值赋给变量y。 具体来说&#xff0c;x是一种后缀自增运算符&#xff0c;表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…

【每日一题】ARC098D - Xor Sum 2 | 思维 | 简单

题目内容 原题链接 给定一个长度为 n n n 的数组 a a a&#xff0c;问有多少个连续子数组的和满足区间加法和等于区间异或和。 数据范围 1 ≤ n ≤ 2 ⋅ 1 0 5 1\leq n\leq 2\cdot 10^5 1≤n≤2⋅105 0 ≤ k < 2 20 0\leq k<2^{20} 0≤k<220 题解 考虑异或是不进…

前端教程-H5游戏开发

Egret EGRETIA RC 版本正式发布 从端到云一站式区块链游戏开发工作流 官网 Laya Air 在渲染模式上&#xff0c;LayaAir 支持 Canvas 和 WebGL 两种方式&#xff1b;在工具流的支持程度上&#xff0c;主要是提供了 LayaAir IDE。LayaAir IDE 包括代码模式与设计模式&#xff…

【MySQL】表的约束

文章目录 1. 表的约束概述2. 空属性 not null3. 默认值 default4. 列描述 comment5. zerofill6. 主键 primary key7. 自增长 auto_increment8. 唯一键 unique9. 外键 foreign key 1. 表的约束概述 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要…

软考高级系统架构设计师系列论文真题九:论软件多层架构的设计

软考高级系统架构设计师系列论文真题九:论软件多层架构的设计 一、论软件多层架构的设计二、理论素材准备三、精品范文赏析1.摘要2.正文3.总结软考高级系统架构设计师系列论文之:百篇软考高级架构设计师论文范文软考高级系统架构设计师系列之:论文题目类型、论文考试大纲、历…

基于微信小程序的英语互助小程序设计与实现(亮点:小组制打卡、模拟考试答题、错题本、学习论坛)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

Java 接口多实现动态调用

简单定义一个接口,做数据插入 public interface ImportingData<T> {AjaxResult addData(T t); }目前本文使用的是根据泛型类实现动态调用,在引入时必须明确是那个实体类, 还有种方法就是给每一个实现类定义业务类型的枚举,这时候子啊接口里面就得多写一个返回枚举的实现…

代码随想录 第8章 二叉树

1、理论知识 &#xff08;1&#xff09;、满二叉树 如果一棵二叉树只有度为0的节点和度为2的节点&#xff0c;并且度为0的节点在同一层上&#xff0c;则这棵二叉树为满二叉树。 &#xff08;2&#xff09;、完全二叉树 除了底层节点可能没有填满&#xff0c;其余每层的节点…

什么是 AirServer?Mac专用投屏工具AirServer 7 .27 for Mac中文破解版百度网盘下载

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…

从零开始—【Mac系统】MacOS配置Java环境变量

系统环境说明 Apple M1 macOS Ventura 版本13.5.2 1.下载JDK安装包 Oracle官网下载地址 JDK下载【注&#xff1a;推荐下载JDK8 Oracle官网JDK8下载】 关于JDK、JRE、JVM的关系说明 JDK(Java Development Kit&#xff0c;Java开发工具包) &#xff0c;是整个JAVA的核心&#…

esbuild中文文档-语法转换(Optimization - Define、Drop、Drop labels)

文章目录 优化配置 OptimizationDefineDropDrop labels 结语 哈喽&#xff0c;大家好&#xff01;我是「励志前端小黑哥」&#xff0c;我带着最新发布的文章又来了&#xff01; 老规矩&#xff0c;小手动起来~点赞关注不迷路&#xff01; esbuild简单介绍 esbuild为了突破Java…

ctfshow web入门(21-28爆破)

web21 抓包 进行了base64加密&#xff0c;解码后发现账号和密码格式是 账号:密码 爆破 位置一开始选错了&#xff0c;应该是不含Basic的 模式选择custom iterator(自定义迭代器) 自定义迭代器可以自定义拼接方式 分别设置三个位置&#xff0c;第一个位置为admin 第二个位置…

RHCE---Linux的计划任务

文章目录 目录 文章目录 前言 一.单一执行的例行性工作 at 命令 二.循环执行的例行性工作 crontab 命令 课后作业&#xff1a; 思维导图 前言 如果想要让自己设计的备份程序可以自动地在系统下面运行&#xff0c;而不需要手动来启动它&#xff0c;这是该如何处理&#xff1f…