1894. Find the Student that Will Replace the Chalk
有n个学生,标号0~n-1
有一个chalk矩阵,chalk[i]表示第i个学生解题时需要多少粉笔
当n-1号学生解完题后会轮会第0号学生
当目前的粉笔不够解题时,该学生需要补充粉笔
假设有k只粉笔,请问是第几个学生要补充粉笔
思路:
建立一个prefix sum array纪录到第i个学生时总共消耗了几只粉笔
并且计算解题一轮所需要的粉笔数 : sum
假设target = k%sum
用二分搜寻法去找target在prefix sum array的第几位就是答案
注意如果prefix_sum[i]==target
那是i+1号学生要补充粉笔
golang code :
func chalkReplacer(chalk []int, k int) int {
n := len(chalk)
prefix_sum, sum := make([]int, n+1), chalk[0]
prefix_sum[0] = chalk[0]
prefix_sum[n] = math.MaxInt32
for i := 1; i < n; i++ {
prefix_sum[i] = prefix_sum[i-1] + chalk[i]
sum += chalk[i]
}
remainder := k % sum
ans, _ := slices.BinarySearch(prefix_sum, remainder)
if prefix_sum[ans] == remainder {
return ans + 1
}
return ans
}