1894 - Find the Student that Will Replace the Chalk

JAVA
  • class Solution {
        public int chalkReplacer(int[] chalk, int k) {
            int n = chalk.length;
            long[] prefixSums = new long[n];
            prefixSums[0] = chalk[0];
            for (int i = 1; i < n; i++)
                prefixSums[i] = prefixSums[i - 1] + chalk[i];
            long remainder = ((long) k) % prefixSums[n - 1];
            for (int i = 0; i < n; i++) {
                if (prefixSums[i] > remainder)
                    return i;
            }
            return -1;
        }
    }
    
    ############
    
    class Solution {
        public int chalkReplacer(int[] chalk, int k) {
            int n = chalk.length;
            long[] s = new long[n + 1];
            s[0] = chalk[0];
            for (int i = 1; i < n; ++i) {
                s[i] = s[i - 1] + chalk[i];
            }
            k %= s[n - 1];
            int left = 0, right = n - 1;
            while (left < right) {
                int mid = (left + right) >> 1;
                if (s[mid] > k) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            return left;
        }
    }
C++

class Solution {
public:
    int chalkReplacer(vector<int>& A, int k) {
        long sum = accumulate(begin(A), end(A), 0L), i = 0, N  = A.size();
        k %= sum;
        while (k >= A[i]) {
            k -= A[i];
            ++i;
        }
        return i;
    }
};

Comments