题目地址:
https://leetcode.com/problems/find-the-student-that-will-replace-the-chalk/
给定一个长 n n n的正整数数组 A A A,和一个正整数 k k k,从 A [ 0 ] A[0] A[0]开始,每次让 k k k减去当前的 A [ i ] A[i] A[i],走到界外的话就回到 0 0 0重新继续操作。问第一次减到负数的位置的下标。
先求一下 s = ∑ A s=\sum A s=∑A,这样最后一轮里 k k k就变成了 k m o d s k\mod s kmods,然后遍历 A A A,找到第一次 k k k不够了的时候的下标。代码如下:
public class Solution {
public int chalkReplacer(int[] chalk, int k) {
long sum = 0;
for (int x : chalk) {
sum += x;
}
k %= sum;
for (int i = 0; i < chalk.length; i++) {
if (chalk[i] > k) {
return i;
}
k -= chalk[i];
}
return -1;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。