Skip to content

Commit e4fdb1e

Browse files
committed
feat: add solutions to lc problem: No.1894
No.1894.Find the Student that Will Replace the Chalk
1 parent 7ee25e9 commit e4fdb1e

File tree

6 files changed

+75
-128
lines changed

6 files changed

+75
-128
lines changed

solution/1800-1899/1894.Find the Student that Will Replace the Chalk/README.md

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,9 @@
7070
```python
7171
class Solution:
7272
def chalkReplacer(self, chalk: List[int], k: int) -> int:
73-
pre_sum = list(itertools.accumulate(chalk))
74-
k %= pre_sum[-1]
75-
left, right = 0, len(chalk) - 1
76-
while left < right:
77-
mid = (left + right) >> 1
78-
if pre_sum[mid] > k:
79-
right = mid
80-
else:
81-
left = mid + 1
82-
return left
73+
s = list(accumulate(chalk))
74+
k %= s[-1]
75+
return bisect_right(s, k)
8376
```
8477

8578
### **Java**
@@ -116,21 +109,10 @@ class Solution {
116109
public:
117110
int chalkReplacer(vector<int>& chalk, int k) {
118111
int n = chalk.size();
119-
vector<long long> preSum(n + 1);
120-
for (int i = 0; i < n; ++i) {
121-
preSum[i + 1] = preSum[i] + chalk[i];
122-
}
123-
k %= preSum[n];
124-
int left = 0, right = n - 1;
125-
while (left < right) {
126-
int mid = left + (right - left >> 1);
127-
if (preSum[mid + 1] > k) {
128-
right = mid;
129-
} else {
130-
left = mid + 1;
131-
}
132-
}
133-
return left;
112+
vector<long long> s(n, chalk[0]);
113+
for (int i = 1; i < n; ++i) s[i] = s[i - 1] + chalk[i];
114+
k %= s[n - 1];
115+
return upper_bound(s.begin(), s.end(), k) - s.begin();
134116
}
135117
};
136118
```
@@ -140,15 +122,15 @@ public:
140122
```go
141123
func chalkReplacer(chalk []int, k int) int {
142124
n := len(chalk)
143-
preSum := make([]int, n+1)
125+
s := make([]int, n+1)
144126
for i := 0; i < n; i++ {
145-
preSum[i+1] = preSum[i] + chalk[i]
127+
s[i+1] = s[i] + chalk[i]
146128
}
147-
k %= preSum[n]
129+
k %= s[n]
148130
left, right := 0, n-1
149131
for left < right {
150-
mid := left + ((right - left) >> 1)
151-
if preSum[mid+1] > k {
132+
mid := (left + right) >> 1
133+
if s[mid+1] > k {
152134
right = mid
153135
} else {
154136
left = mid + 1

solution/1800-1899/1894.Find the Student that Will Replace the Chalk/README_EN.md

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,9 @@ PreSum and Binary search.
6464
```python
6565
class Solution:
6666
def chalkReplacer(self, chalk: List[int], k: int) -> int:
67-
pre_sum = list(itertools.accumulate(chalk))
68-
k %= pre_sum[-1]
69-
left, right = 0, len(chalk) - 1
70-
while left < right:
71-
mid = (left + right) >> 1
72-
if pre_sum[mid] > k:
73-
right = mid
74-
else:
75-
left = mid + 1
76-
return left
67+
s = list(accumulate(chalk))
68+
k %= s[-1]
69+
return bisect_right(s, k)
7770
```
7871

7972
### **Java**
@@ -108,21 +101,10 @@ class Solution {
108101
public:
109102
int chalkReplacer(vector<int>& chalk, int k) {
110103
int n = chalk.size();
111-
vector<long long> preSum(n + 1);
112-
for (int i = 0; i < n; ++i) {
113-
preSum[i + 1] = preSum[i] + chalk[i];
114-
}
115-
k %= preSum[n];
116-
int left = 0, right = n - 1;
117-
while (left < right) {
118-
int mid = left + (right - left >> 1);
119-
if (preSum[mid + 1] > k) {
120-
right = mid;
121-
} else {
122-
left = mid + 1;
123-
}
124-
}
125-
return left;
104+
vector<long long> s(n, chalk[0]);
105+
for (int i = 1; i < n; ++i) s[i] = s[i - 1] + chalk[i];
106+
k %= s[n - 1];
107+
return upper_bound(s.begin(), s.end(), k) - s.begin();
126108
}
127109
};
128110
```
@@ -132,15 +114,15 @@ public:
132114
```go
133115
func chalkReplacer(chalk []int, k int) int {
134116
n := len(chalk)
135-
preSum := make([]int, n+1)
117+
s := make([]int, n+1)
136118
for i := 0; i < n; i++ {
137-
preSum[i+1] = preSum[i] + chalk[i]
119+
s[i+1] = s[i] + chalk[i]
138120
}
139-
k %= preSum[n]
121+
k %= s[n]
140122
left, right := 0, n-1
141123
for left < right {
142-
mid := left + ((right - left) >> 1)
143-
if preSum[mid+1] > k {
124+
mid := (left + right) >> 1
125+
if s[mid+1] > k {
144126
right = mid
145127
} else {
146128
left = mid + 1
Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,10 @@
1-
class Solution {
2-
public:
3-
int chalkReplacer(vector<int>& chalk, int k) {
4-
int n = chalk.size();
5-
vector<long long> preSum(n + 1);
6-
for (int i = 0; i < n; ++i) {
7-
preSum[i + 1] = preSum[i] + chalk[i];
8-
}
9-
k %= preSum[n];
10-
int left = 0, right = n - 1;
11-
while (left < right) {
12-
int mid = left + (right - left >> 1);
13-
if (preSum[mid + 1] > k) {
14-
right = mid;
15-
} else {
16-
left = mid + 1;
17-
}
18-
}
19-
return left;
20-
}
1+
class Solution {
2+
public:
3+
int chalkReplacer(vector<int>& chalk, int k) {
4+
int n = chalk.size();
5+
vector<long long> s(n, chalk[0]);
6+
for (int i = 1; i < n; ++i) s[i] = s[i - 1] + chalk[i];
7+
k %= s[n - 1];
8+
return upper_bound(s.begin(), s.end(), k) - s.begin();
9+
}
2110
};
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
func chalkReplacer(chalk []int, k int) int {
2-
n := len(chalk)
3-
preSum := make([]int, n+1)
4-
for i := 0; i < n; i++ {
5-
preSum[i+1] = preSum[i] + chalk[i]
6-
}
7-
k %= preSum[n]
8-
left, right := 0, n-1
9-
for left < right {
10-
mid := left + ((right - left) >> 1)
11-
if preSum[mid+1] > k {
12-
right = mid
13-
} else {
14-
left = mid + 1
15-
}
16-
}
17-
return left
1+
func chalkReplacer(chalk []int, k int) int {
2+
n := len(chalk)
3+
s := make([]int, n+1)
4+
for i := 0; i < n; i++ {
5+
s[i+1] = s[i] + chalk[i]
6+
}
7+
k %= s[n]
8+
left, right := 0, n-1
9+
for left < right {
10+
mid := (left + right) >> 1
11+
if s[mid+1] > k {
12+
right = mid
13+
} else {
14+
left = mid + 1
15+
}
16+
}
17+
return left
1818
}
Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
1-
class Solution {
2-
public int chalkReplacer(int[] chalk, int k) {
3-
int n = chalk.length;
4-
long[] preSum = new long[n + 1];
5-
for (int i = 0; i < n; ++i) {
6-
preSum[i + 1] = preSum[i] + chalk[i];
7-
}
8-
k %= preSum[n];
9-
int left = 0, right = n - 1;
10-
while (left < right) {
11-
int mid = (left + right) >> 1;
12-
if (preSum[mid + 1] > k) {
13-
right = mid;
14-
} else {
15-
left = mid + 1;
16-
}
17-
}
18-
return left;
19-
}
1+
class Solution {
2+
public int chalkReplacer(int[] chalk, int k) {
3+
int n = chalk.length;
4+
long[] s = new long[n + 1];
5+
s[0] = chalk[0];
6+
for (int i = 1; i < n; ++i) {
7+
s[i] = s[i - 1] + chalk[i];
8+
}
9+
k %= s[n - 1];
10+
int left = 0, right = n - 1;
11+
while (left < right) {
12+
int mid = (left + right) >> 1;
13+
if (s[mid] > k) {
14+
right = mid;
15+
} else {
16+
left = mid + 1;
17+
}
18+
}
19+
return left;
20+
}
2021
}
Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
1-
class Solution:
2-
def chalkReplacer(self, chalk: List[int], k: int) -> int:
3-
pre_sum = list(itertools.accumulate(chalk))
4-
k %= pre_sum[-1]
5-
left, right = 0, len(chalk) - 1
6-
while left < right:
7-
mid = (left + right) >> 1
8-
if pre_sum[mid] > k:
9-
right = mid
10-
else:
11-
left = mid + 1
12-
return left
1+
class Solution:
2+
def chalkReplacer(self, chalk: List[int], k: int) -> int:
3+
s = list(accumulate(chalk))
4+
k %= s[-1]
5+
return bisect_right(s, k)

0 commit comments

Comments
 (0)