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

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了

你可能感兴趣的:(1894. 找到需要补充粉笔的学生编号)