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 的学生没有足够的粉笔,所以他需要补充粉笔。

解题思路

使用前缀和+二分

  1. 我们可以通过维护一个前缀和数组,记录下当遍历到当前学生A的时候,已经消耗了多少根粉笔
  2. 因为chalk数组是需要循环遍历的,所以当chalk数组的总和小于k的时候,我们可以直接将k将去chalk数组的总和,当作已经遍历了一轮了粉笔还没消耗完。我们可以通过取模,直接避免这种循环遍历
  3. 使用二分法查找前缀和小于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. 找到需要补充粉笔的学生编号相关推荐

  1. LeetCode1221.分割平衡字符串1894.找到需要补充粉笔的学生编号(C++)

    LeetCode1221.分割平衡字符串&1894.找到需要补充粉笔的学生编号(C++) 前言 LeetCode1221.分割平衡字符串 解题思路 代码 LeetCode1894.找到需要补充 ...

  2. 每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!...

    1894.找到需要补充粉笔的学生编号 https://leetcode-cn.com/problems/find-the-student-that-will-replace-the-chalk/ 难度 ...

  3. Leetcode刷题100天—1894. 找到需要补充粉笔的学生编号( 数组)—day34

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 1894. 找到需要补充粉笔的学生编号 难度中等39收藏分享切换为英文接收动态反馈 一个班级里有 n 个学生,编号为 0 到 n - 1 .每个学生会依 ...

  4. LeetCode 1894. 找到需要补充粉笔的学生编号

    文章目录 1. 题目 2. 解题 1. 题目 一个班级里有 n 个学生,编号为 0 到 n - 1 . 每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 ...

  5. 【leetcode刷题】找到需补充粉笔的学生编号

    前言 题目:一个班级里有 n 个学生,编号为 0 到 n - 1 .每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复 ...

  6. LeetCode刷题1894-中等-找到需要补充粉笔的学生编号

    文章目录 ☀️ 前言 ☀️

  7. ✨【Code皮皮虾】一次通过99.90%,思路详解【找到需要补充粉笔的学生编号】

    文章目录

  8. 2021-09-10 LeetCode1894-找到需要补充粉笔的学生编号(每日一题)

    算法思路借鉴于官方题解,添加了详细注释用于理解,刷题打卡 感觉这题也就是个easy难度,没什么特殊的地方 class Solution {public:int chalkReplacer(vector ...

  9. 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

    5.查询所有同学的学生编号.学生姓名.选课总数.所有课程的总成绩 SELECT st.s_id,st.s_name,c,s FROM student st LEFT JOIN (SELECT sc.s ...

最新文章

  1. “OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized“ error
  2. WaitForSingleObject的用法详细介绍
  3. 5个很常用的CSS3网页小实例
  4. 如何在windows下安装JDK
  5. SQL Server 不同数据库导入指定数据解决方案
  6. 何时运行 A/B 测试,亚马逊、微软、谷歌等大厂是怎么做的?
  7. python对文件操作的统一步骤_基于Python实现对各种数据文件的操作
  8. 项目进度计划检查方法与项目进度管理相关模版表单(干货+资料)
  9. xz1刷Android10,索尼xz1国行版安卓9.0固件
  10. Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
  11. Excel复制单元格样式
  12. 在linux终端中重命名文件,Linux系统中重命名文件的方法有哪些
  13. 颠覆平庸 在技术上持续精进
  14. H3c 详细Raid配置过程
  15. App inventor 写的垃圾分类小助手(一)
  16. AppRTC(WebRTC)服务器搭建
  17. git master、origin master 与 origin/master 的区别
  18. VSC的基础使用(插件和设置)
  19. 追踪tcp得到php一句话菜刀连接即可,强大的PHP一句话后门
  20. 计算机控制知识点总结,自己整理的计算机控制重点

热门文章

  1. Makefile(三)
  2. 网易严选Java开发三面面经:java读文件内容
  3. 计算星期c语言编码,[转载]计算任何一天是星期几的C语言源代码.
  4. rails 放在 apache一个目录下面的配置方法
  5. Cookie,Session基础知识
  6. 基于TCP的在线聊天程序
  7. Python django解决跨域请求的问题
  8. Fluent NHibernate之旅
  9. mac下 如果docker 如果访问不到网 就下载哥docker-machine 然后进入到vbox下进行操作
  10. EmguCV 一些基本操作