跳到主要内容

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

链接:1894.找到需要补充粉笔的学生编号
难度:Medium
标签:数组、二分查找、前缀和、模拟
简介:请你返回需要 补充 粉笔的学生 编号 。

题解 1 - typescript

  • 编辑时间:2021-09-10
  • 执行用时:1052ms
  • 内存消耗:49.6MB
  • 编程语言:typescript
  • 解法介绍:循环相减。
function chalkReplacer(chalk: number[], k: number): number {
const sum = chalk.reduce((total, cur) => total + cur, 0);
while (k >= sum) k -= sum;
let idx = 0;
while (k >= chalk[idx]) k -= chalk[idx++];
return idx;
}

题解 2 - typescript

  • 编辑时间:2021-09-10
  • 执行用时:796ms
  • 内存消耗:54.2MB
  • 编程语言:typescript
  • 解法介绍:二分+前缀和。
function chalkReplacer(chalk: number[], k: number): number {
let sum = 0;
const sums: number[] = [0];
const n = chalk.length;
for (let i = 0; i < n; i++) sums.push((sum += chalk[i]));
while (k >= sum) k -= sum;
return find(k) - 1;
function find(num: number) {
let l = 0;
let r = n;
while (l < r) {
const mid = (l + r) >> 1;
if (sums[mid] > num) r = mid;
else l = mid + 1;
}
return l;
}
}