1894. 找到需要补充粉笔的学生编号
1894. 找到需要补充粉笔的学生编号
一个班级里有 n 个学生,编号为 0 到 n - 1 。每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复这个过程,重新从编号为 0 的学生开始回答问题。
给你一个长度为 n 且下标从 0 开始的整数数组 chalk 和一个整数 k 。一开始粉笔盒里总共有 k 支粉笔。当编号为 i 的学生回答问题时,他会消耗 chalk[i] 支粉笔。如果剩余粉笔数量 严格小于 chalk[i] ,那么学生 i 需要 补充 粉笔。
请你返回需要 补充 粉笔的学生 编号 。
示例 1:输入:chalk = [5,1,5], k = 22
输出:0
解释:学生消耗粉笔情况如下:
- 编号为 0 的学生使用 5 支粉笔,然后 k = 17 。
- 编号为 1 的学生使用 1 支粉笔,然后 k = 16 。
- 编号为 2 的学生使用 5 支粉笔,然后 k = 11 。
- 编号为 0 的学生使用 5 支粉笔,然后 k = 6 。
- 编号为 1 的学生使用 1 支粉笔,然后 k = 5 。
- 编号为 2 的学生使用 5 支粉笔,然后 k = 0 。
编号为 0 的学生没有足够的粉笔,所以他需要补充粉笔。
示例 2:输入:chalk = [3,4,1,2], k = 25
输出:1
解释:学生消耗粉笔情况如下:
- 编号为 0 的学生使用 3 支粉笔,然后 k = 22 。
- 编号为 1 的学生使用 4 支粉笔,然后 k = 18 。
- 编号为 2 的学生使用 1 支粉笔,然后 k = 17 。
- 编号为 3 的学生使用 2 支粉笔,然后 k = 15 。
- 编号为 0 的学生使用 3 支粉笔,然后 k = 12 。
- 编号为 1 的学生使用 4 支粉笔,然后 k = 8 。
- 编号为 2 的学生使用 1 支粉笔,然后 k = 7 。
- 编号为 3 的学生使用 2 支粉笔,然后 k = 5 。
- 编号为 0 的学生使用 3 支粉笔,然后 k = 2 。
编号为 1 的学生没有足够的粉笔,所以他需要补充粉笔。
解题思路
使用前缀和+二分
- 我们可以通过维护一个前缀和数组,记录下当遍历到当前学生A的时候,已经消耗了多少根粉笔
- 因为chalk数组是需要循环遍历的,所以当chalk数组的总和小于k的时候,我们可以直接将k将去chalk数组的总和,当作已经遍历了一轮了粉笔还没消耗完。我们可以通过取模,直接避免这种循环遍历
- 使用二分法查找前缀和小于k的下标,说明遍历到当前学生的时候,粉笔已经用完了
代码
class Solution {public int chalkReplacer(int[] chalk, int k) {int n=chalk.length;long[] dp=new long[n+1];for(int i=0;i<n;i++)dp[i+1]=dp[i]+chalk[i];long tar=k%dp[n];int l=0,r=n;while(l<=r){int mid=(r-l)/2+l;if(dp[mid]>tar){r=mid-1;}else l=mid+1;}return l-1;}
}
1894. 找到需要补充粉笔的学生编号相关推荐
- LeetCode1221.分割平衡字符串1894.找到需要补充粉笔的学生编号(C++)
LeetCode1221.分割平衡字符串&1894.找到需要补充粉笔的学生编号(C++) 前言 LeetCode1221.分割平衡字符串 解题思路 代码 LeetCode1894.找到需要补充 ...
- 每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!...
1894.找到需要补充粉笔的学生编号 https://leetcode-cn.com/problems/find-the-student-that-will-replace-the-chalk/ 难度 ...
- Leetcode刷题100天—1894. 找到需要补充粉笔的学生编号( 数组)—day34
前言: 作者:神的孩子在歌唱 大家好,我叫运智 1894. 找到需要补充粉笔的学生编号 难度中等39收藏分享切换为英文接收动态反馈 一个班级里有 n 个学生,编号为 0 到 n - 1 .每个学生会依 ...
- LeetCode 1894. 找到需要补充粉笔的学生编号
文章目录 1. 题目 2. 解题 1. 题目 一个班级里有 n 个学生,编号为 0 到 n - 1 . 每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 ...
- 【leetcode刷题】找到需补充粉笔的学生编号
前言 题目:一个班级里有 n 个学生,编号为 0 到 n - 1 .每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复 ...
- LeetCode刷题1894-中等-找到需要补充粉笔的学生编号
文章目录 ☀️ 前言 ☀️
- ✨【Code皮皮虾】一次通过99.90%,思路详解【找到需要补充粉笔的学生编号】
文章目录
- 2021-09-10 LeetCode1894-找到需要补充粉笔的学生编号(每日一题)
算法思路借鉴于官方题解,添加了详细注释用于理解,刷题打卡 感觉这题也就是个easy难度,没什么特殊的地方 class Solution {public:int chalkReplacer(vector ...
- 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
5.查询所有同学的学生编号.学生姓名.选课总数.所有课程的总成绩 SELECT st.s_id,st.s_name,c,s FROM student st LEFT JOIN (SELECT sc.s ...
最新文章
- “OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized“ error
- WaitForSingleObject的用法详细介绍
- 5个很常用的CSS3网页小实例
- 如何在windows下安装JDK
- SQL Server 不同数据库导入指定数据解决方案
- 何时运行 A/B 测试,亚马逊、微软、谷歌等大厂是怎么做的?
- python对文件操作的统一步骤_基于Python实现对各种数据文件的操作
- 项目进度计划检查方法与项目进度管理相关模版表单(干货+资料)
- xz1刷Android10,索尼xz1国行版安卓9.0固件
- Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
- Excel复制单元格样式
- 在linux终端中重命名文件,Linux系统中重命名文件的方法有哪些
- 颠覆平庸 在技术上持续精进
- H3c 详细Raid配置过程
- App inventor 写的垃圾分类小助手(一)
- AppRTC(WebRTC)服务器搭建
- git master、origin master 与 origin/master 的区别
- VSC的基础使用(插件和设置)
- 追踪tcp得到php一句话菜刀连接即可,强大的PHP一句话后门
- 计算机控制知识点总结,自己整理的计算机控制重点