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

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—1894. 找到需要补充粉笔的学生编号( 数组)—day34相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

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

难度中等39收藏分享切换为英文接收动态反馈

一个班级里有 n 个学生,编号为 0n - 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 的学生没有足够的粉笔,所以他需要补充粉笔。

提示:

  • chalk.length == n
  • 1 <= n <= 105
  • 1 <= chalk[i] <= 105
  • 1 <= k <= 109
package 数组;

public class _1894_找到需要补充粉笔的学生编号 {
	//解题思路:获取数组长度遍历, k减去元素,直到k<chalk[i]	
//	第一种代码超时了
    public int chalkReplacer(int[] chalk, int k) {
		int n=chalk.length;
		int i = 0;
		if (n==0) {
			return 0;
		}
		while(k>=0) {
			i=0;
			for(int num:chalk) {
				k=k-chalk[i];
				if (k<0) {
					break;
				}
				i++;
			}			
		}

		return i;
    }
//第二种思路,先遍历一遍,获取其数组总值,然后求其与k的余数,他们的余数就是最后剩下需要遍历的值
	public int chalkReplacer1(int[] chalk, int k) {
		int i = 0;
		int sum=k;
//		先遍历第一遍
		for(int num:chalk) {
			sum=sum-chalk[i];
			if (sum<0) {
				return i;
			}
			i++;
		}
//		求出他的余数就是他的要找的数
		int s=k%(k-sum);
		i=0;
		for(int num:chalk) {
			s=s-chalk[i];
			if (s<0) {
				return i;
			}
			i++;
		}

		return i;
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—1894. 找到需要补充粉笔的学生编号( 数组)—day34的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Leetcode刷题100天—997. 找到小镇的法官( 百度算法)—day90

Leetcode刷题100天—700. 二叉搜索树中的搜索( 二叉树)—day34

Leetcode刷题100天—700. 二叉搜索树中的搜索( 二叉树)—day34

Leetcode刷题100天—169. 多数元素(数组)—day73