1894. 找到需要补充粉笔的学生编号
public int chalkReplacer(int[] chalk, int k) {
long sum = 0;
for (Integer i : chalk) {
sum += i;
}
k = (int) (k % sum);
int start = 0;
while(k >= chalk[start]) {
k -= chalk[start];
start++;
if(start == chalk.length) {
start = 0;
}
}
return start;
}
解题思路
这道题很简单,循环减单个学生所需的粉笔数,直到 K < 当前学生所需粉笔数,返回当前学生下标即可
1、唯一要关注的点就是为了简化循环会用 K 取余 所有学生所需的总数;
2、所有学生所需粉笔数之和可能会 溢出还有一个我感觉很巧妙的解题思路
1、对已有数组进行前缀和计算出新的数组,计算期间如果 > K,直接返回当前学生的下标(数组越界);
2、K 对数组最后一位取余,对该值进行二分查找 详见哎,巧妙,我还是太LOW了