Skip to content

Commit baf77c7

Browse files
committed
feat: add solutions to lc problem: No.1450
No.1450.Number of Students Doing Homework at a Given Time
1 parent ca69fd1 commit baf77c7

File tree

6 files changed

+197
-57
lines changed

6 files changed

+197
-57
lines changed

solution/1400-1499/1450.Number of Students Doing Homework at a Given Time/README.md

+106-19
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,36 @@
6464

6565
<!-- 这里可写通用的实现逻辑 -->
6666

67+
**方法一:遍历计数**
68+
69+
同时遍历 $startTime$ 和 $endTime$,统计正在做作业的学生人数。
70+
71+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 是 $startTime$ 和 $endTime$ 的长度。
72+
73+
**方法二:差分数组**
74+
75+
差分数组可以 $O(1)$ 时间处理区间加减操作。例如,对区间 $[l, r]$ 中的每个数加上 $c$。
76+
77+
假设数组 $a$ 的所有元素分别为 $a[1], a[2], ... a[n]$,则差分数组 $b$ 的元素 $b[i]=a[i]-a[i-1]$。
78+
79+
$$
80+
\begin{cases}
81+
b[1]=a[1]\\
82+
b[2]=a[2]-a[1]\\
83+
b[3]=a[3]-a[2]\\
84+
...\\
85+
b[i]=a[i]-a[i-1]\\
86+
\end{cases}
87+
$$
88+
89+
那么 $a[i]=b[1]+b[2]+...+b[i]$,原数组 $a$ 是差分数组 $b$ 的前缀和。
90+
91+
在这道题中,我们定义差分数组 $c$,然后遍历两个数组中对应位置的两个数 $a$, $b$,则 $c[a]+=1$, $c[b+1]-=1$。
92+
93+
遍历结束后,对差分数组 $c$ 进行求前缀和操作,即可得到 $queryTime$ 时刻正在做作业的学生人数。
94+
95+
时间复杂度 $O(n+queryTime)$,空间复杂度 $O(1010)$。
96+
6797
<!-- tabs:start -->
6898

6999
### **Python3**
@@ -75,10 +105,17 @@ class Solution:
75105
def busyStudent(
76106
self, startTime: List[int], endTime: List[int], queryTime: int
77107
) -> int:
78-
count, n = 0, len(startTime)
79-
for i in range(n):
80-
count += startTime[i] <= queryTime <= endTime[i]
81-
return count
108+
return sum(a <= queryTime <= b for a, b in zip(startTime, endTime))
109+
```
110+
111+
```python
112+
class Solution:
113+
def busyStudent(self, startTime: List[int], endTime: List[int], queryTime: int) -> int:
114+
c = [0] * 1010
115+
for a, b in zip(startTime, endTime):
116+
c[a] += 1
117+
c[b + 1] -= 1
118+
return sum(c[: queryTime + 1])
82119
```
83120

84121
### **Java**
@@ -88,13 +125,30 @@ class Solution:
88125
```java
89126
class Solution {
90127
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
91-
int count = 0, n = startTime.length;
92-
for (int i = 0; i < n; ++i) {
128+
int ans = 0;
129+
for (int i = 0; i < startTime.length; ++i) {
93130
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
94-
++count;
131+
++ans;
95132
}
96133
}
97-
return count;
134+
return ans;
135+
}
136+
}
137+
```
138+
139+
```java
140+
class Solution {
141+
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
142+
int[] c = new int[1010];
143+
for (int i = 0; i < startTime.length; ++i) {
144+
c[startTime[i]]++;
145+
c[endTime[i] + 1]--;
146+
}
147+
int ans = 0;
148+
for (int i = 0; i <= queryTime; ++i) {
149+
ans += c[i];
150+
}
151+
return ans;
98152
}
99153
}
100154
```
@@ -105,13 +159,29 @@ class Solution {
105159
class Solution {
106160
public:
107161
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
108-
int count = 0, n = startTime.size();
109-
for (int i = 0; i < n; ++i) {
110-
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
111-
++count;
112-
}
162+
int ans = 0;
163+
for (int i = 0; i < startTime.size(); ++i) {
164+
ans += startTime[i] <= queryTime && queryTime <= endTime[i];
113165
}
114-
return count;
166+
return ans;
167+
}
168+
};
169+
```
170+
171+
```cpp
172+
class Solution {
173+
public:
174+
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
175+
vector<int> c(1010);
176+
for (int i = 0; i < startTime.size(); ++i) {
177+
c[startTime[i]]++;
178+
c[endTime[i] + 1]--;
179+
}
180+
int ans = 0;
181+
for (int i = 0; i <= queryTime; ++i) {
182+
ans += c[i];
183+
}
184+
return ans;
115185
}
116186
};
117187
```
@@ -120,13 +190,30 @@ public:
120190

121191
```go
122192
func busyStudent(startTime []int, endTime []int, queryTime int) int {
123-
count, n := 0, len(startTime)
124-
for i := 0; i < n; i++ {
125-
if startTime[i] <= queryTime && queryTime <= endTime[i] {
126-
count++
193+
ans := 0
194+
for i, a := range startTime {
195+
b := endTime[i]
196+
if a <= queryTime && queryTime <= b {
197+
ans++
127198
}
128199
}
129-
return count
200+
return ans
201+
}
202+
```
203+
204+
```go
205+
func busyStudent(startTime []int, endTime []int, queryTime int) int {
206+
c := make([]int, 1010)
207+
for i, a := range startTime {
208+
b := endTime[i]
209+
c[a]++
210+
c[b+1]--
211+
}
212+
ans := 0
213+
for i := 0; i <= queryTime; i++ {
214+
ans += c[i]
215+
}
216+
return ans
130217
}
131218
```
132219

solution/1400-1499/1450.Number of Students Doing Homework at a Given Time/README_EN.md

+76-19
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,48 @@ class Solution:
5151
def busyStudent(
5252
self, startTime: List[int], endTime: List[int], queryTime: int
5353
) -> int:
54-
count, n = 0, len(startTime)
55-
for i in range(n):
56-
count += startTime[i] <= queryTime <= endTime[i]
57-
return count
54+
return sum(a <= queryTime <= b for a, b in zip(startTime, endTime))
55+
```
56+
57+
```python
58+
class Solution:
59+
def busyStudent(self, startTime: List[int], endTime: List[int], queryTime: int) -> int:
60+
c = [0] * 1010
61+
for a, b in zip(startTime, endTime):
62+
c[a] += 1
63+
c[b + 1] -= 1
64+
return sum(c[: queryTime + 1])
5865
```
5966

6067
### **Java**
6168

6269
```java
6370
class Solution {
6471
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
65-
int count = 0, n = startTime.length;
66-
for (int i = 0; i < n; ++i) {
72+
int ans = 0;
73+
for (int i = 0; i < startTime.length; ++i) {
6774
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
68-
++count;
75+
++ans;
6976
}
7077
}
71-
return count;
78+
return ans;
79+
}
80+
}
81+
```
82+
83+
```java
84+
class Solution {
85+
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
86+
int[] c = new int[1010];
87+
for (int i = 0; i < startTime.length; ++i) {
88+
c[startTime[i]]++;
89+
c[endTime[i] + 1]--;
90+
}
91+
int ans = 0;
92+
for (int i = 0; i <= queryTime; ++i) {
93+
ans += c[i];
94+
}
95+
return ans;
7296
}
7397
}
7498
```
@@ -79,13 +103,29 @@ class Solution {
79103
class Solution {
80104
public:
81105
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
82-
int count = 0, n = startTime.size();
83-
for (int i = 0; i < n; ++i) {
84-
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
85-
++count;
86-
}
106+
int ans = 0;
107+
for (int i = 0; i < startTime.size(); ++i) {
108+
ans += startTime[i] <= queryTime && queryTime <= endTime[i];
109+
}
110+
return ans;
111+
}
112+
};
113+
```
114+
115+
```cpp
116+
class Solution {
117+
public:
118+
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
119+
vector<int> c(1010);
120+
for (int i = 0; i < startTime.size(); ++i) {
121+
c[startTime[i]]++;
122+
c[endTime[i] + 1]--;
87123
}
88-
return count;
124+
int ans = 0;
125+
for (int i = 0; i <= queryTime; ++i) {
126+
ans += c[i];
127+
}
128+
return ans;
89129
}
90130
};
91131
```
@@ -94,13 +134,30 @@ public:
94134

95135
```go
96136
func busyStudent(startTime []int, endTime []int, queryTime int) int {
97-
count, n := 0, len(startTime)
98-
for i := 0; i < n; i++ {
99-
if startTime[i] <= queryTime && queryTime <= endTime[i] {
100-
count++
137+
ans := 0
138+
for i, a := range startTime {
139+
b := endTime[i]
140+
if a <= queryTime && queryTime <= b {
141+
ans++
101142
}
102143
}
103-
return count
144+
return ans
145+
}
146+
```
147+
148+
```go
149+
func busyStudent(startTime []int, endTime []int, queryTime int) int {
150+
c := make([]int, 1010)
151+
for i, a := range startTime {
152+
b := endTime[i]
153+
c[a]++
154+
c[b+1]--
155+
}
156+
ans := 0
157+
for i := 0; i <= queryTime; i++ {
158+
ans += c[i]
159+
}
160+
return ans
104161
}
105162
```
106163

Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
class Solution {
22
public:
33
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
4-
int count = 0, n = startTime.size();
5-
for (int i = 0; i < n; ++i) {
6-
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
7-
++count;
8-
}
4+
int ans = 0;
5+
for (int i = 0; i < startTime.size(); ++i) {
6+
ans += startTime[i] <= queryTime && queryTime <= endTime[i];
97
}
10-
return count;
8+
return ans;
119
}
1210
};
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
func busyStudent(startTime []int, endTime []int, queryTime int) int {
2-
count, n := 0, len(startTime)
3-
for i := 0; i < n; i++ {
4-
if startTime[i] <= queryTime && queryTime <= endTime[i] {
5-
count++
2+
ans := 0
3+
for i, a := range startTime {
4+
b := endTime[i]
5+
if a <= queryTime && queryTime <= b {
6+
ans++
67
}
78
}
8-
return count
9+
return ans
910
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution {
22
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
3-
int count = 0, n = startTime.length;
4-
for (int i = 0; i < n; ++i) {
3+
int ans = 0;
4+
for (int i = 0; i < startTime.length; ++i) {
55
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
6-
++count;
6+
++ans;
77
}
88
}
9-
return count;
9+
return ans;
1010
}
1111
}

solution/1400-1499/1450.Number of Students Doing Homework at a Given Time/Solution.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,4 @@ class Solution:
22
def busyStudent(
33
self, startTime: List[int], endTime: List[int], queryTime: int
44
) -> int:
5-
count, n = 0, len(startTime)
6-
for i in range(n):
7-
count += startTime[i] <= queryTime <= endTime[i]
8-
return count
5+
return sum(a <= queryTime <= b for a, b in zip(startTime, endTime))

0 commit comments

Comments
 (0)