Skip to content

Commit 87efd6c

Browse files
committedJun 3, 2023
feat: add solutions to lc problem: No.1176
No.1176.Diet Plan Performance
1 parent 0923ec2 commit 87efd6c

File tree

7 files changed

+265
-92
lines changed

7 files changed

+265
-92
lines changed
 

‎solution/1100-1199/1176.Diet Plan Performance/README.md

+97-31
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@
6060

6161
**方法一:前缀和**
6262

63-
先预处理出长度为 $n+1$ 的前缀和数组 $s$,其中 $s[i]$ 表示前 $i$ 天的卡路里总和。
63+
我们先预处理出长度为 $n+1$ 的前缀和数组 $s$,其中 $s[i]$ 表示前 $i$ 天的卡路里总和。
6464

6565
然后遍历前缀和数组 $s$,对于每个位置 $i$,计算 $s[i+k]-s[i]$,即为第 $i$ 天开始的连续 $k$ 天的卡路里总和。根据题意,对于每个 $s[i+k]-s[i]$,判断值与 $lower$ 和 $upper$ 的关系,更新答案即可。
6666

6767
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为数组 `calories` 的长度。
6868

6969
**方法二:滑动窗口**
7070

71-
滑动窗口。维护一个长度为 $k$ 的滑动窗口,窗口内元素之和记为 $s$。如果 $s \lt lower$,则分数减 $1$;如果 $ s \gt upper$,则分数加 $1$。
71+
我们维护一个长度为 $k$ 的滑动窗口,窗口内元素之和记为 $s$。如果 $s \lt lower$,则分数减 $1$;如果 $ s \gt upper$,则分数加 $1$。
7272

7373
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `calories` 的长度。
7474

@@ -94,7 +94,9 @@ class Solution:
9494

9595
```python
9696
class Solution:
97-
def dietPlanPerformance(self, calories: List[int], k: int, lower: int, upper: int) -> int:
97+
def dietPlanPerformance(
98+
self, calories: List[int], k: int, lower: int, upper: int
99+
) -> int:
98100
def check(s):
99101
if s < lower:
100102
return -1
@@ -169,13 +171,19 @@ class Solution {
169171
public:
170172
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
171173
int n = calories.size();
172-
vector<int> s(n + 1);
173-
for (int i = 0; i < n; ++i) s[i + 1] = s[i] + calories[i];
174+
int s[n + 1];
175+
s[0] = 0;
176+
for (int i = 0; i < n; ++i) {
177+
s[i + 1] = s[i] + calories[i];
178+
}
174179
int ans = 0;
175180
for (int i = 0; i < n - k + 1; ++i) {
176181
int t = s[i + k] - s[i];
177-
if (t < lower) --ans;
178-
else if (t > upper) ++ans;
182+
if (t < lower) {
183+
--ans;
184+
} else if (t > upper) {
185+
++ans;
186+
}
179187
}
180188
return ans;
181189
}
@@ -189,12 +197,18 @@ public:
189197
int n = calories.size();
190198
int s = accumulate(calories.begin(), calories.begin() + k, 0);
191199
int ans = 0;
192-
if (s < lower) --ans;
193-
else if (s > upper) ++ans;
200+
if (s < lower) {
201+
--ans;
202+
} else if (s > upper) {
203+
++ans;
204+
}
194205
for (int i = k; i < n; ++i) {
195206
s += calories[i] - calories[i - k];
196-
if (s < lower) --ans;
197-
else if (s > upper) ++ans;
207+
if (s < lower) {
208+
--ans;
209+
} else if (s > upper) {
210+
++ans;
211+
}
198212
}
199213
return ans;
200214
}
@@ -204,13 +218,12 @@ public:
204218
### **Go**
205219

206220
```go
207-
func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
221+
func dietPlanPerformance(calories []int, k int, lower int, upper int) (ans int) {
208222
n := len(calories)
209223
s := make([]int, n+1)
210-
for i, v := range calories {
211-
s[i+1] = s[i] + v
224+
for i, x := range calories {
225+
s[i+1] = s[i] + x
212226
}
213-
ans := 0
214227
for i := 0; i < n-k+1; i++ {
215228
t := s[i+k] - s[i]
216229
if t < lower {
@@ -219,32 +232,85 @@ func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
219232
ans++
220233
}
221234
}
222-
return ans
235+
return
223236
}
224237
```
225238

226239
```go
227-
func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
228-
check := func(s int) int {
229-
if s < lower {
230-
return -1
231-
}
232-
if s > upper {
233-
return 1
234-
}
235-
return 0
236-
}
240+
func dietPlanPerformance(calories []int, k int, lower int, upper int) (ans int) {
237241
n := len(calories)
238242
s := 0
239-
for i := 0; i < k; i++ {
240-
s += calories[i]
243+
for _, x := range calories[:k] {
244+
s += x
245+
}
246+
if s < lower {
247+
ans--
248+
} else if s > upper {
249+
ans++
241250
}
242-
ans := check(s)
243251
for i := k; i < n; i++ {
244252
s += calories[i] - calories[i-k]
245-
ans += check(s)
253+
if s < lower {
254+
ans--
255+
} else if s > upper {
256+
ans++
257+
}
246258
}
247-
return ans
259+
return
260+
}
261+
```
262+
263+
### **TypeScript**
264+
265+
```ts
266+
function dietPlanPerformance(
267+
calories: number[],
268+
k: number,
269+
lower: number,
270+
upper: number,
271+
): number {
272+
const n = calories.length;
273+
const s: number[] = new Array(n + 1).fill(0);
274+
for (let i = 0; i < n; ++i) {
275+
s[i + 1] = s[i] + calories[i];
276+
}
277+
let ans = 0;
278+
for (let i = 0; i < n - k + 1; ++i) {
279+
const t = s[i + k] - s[i];
280+
if (t < lower) {
281+
--ans;
282+
} else if (t > upper) {
283+
++ans;
284+
}
285+
}
286+
return ans;
287+
}
288+
```
289+
290+
```ts
291+
function dietPlanPerformance(
292+
calories: number[],
293+
k: number,
294+
lower: number,
295+
upper: number,
296+
): number {
297+
const n = calories.length;
298+
let s = calories.slice(0, k).reduce((a, b) => a + b);
299+
let ans = 0;
300+
if (s < lower) {
301+
--ans;
302+
} else if (s > upper) {
303+
++ans;
304+
}
305+
for (let i = k; i < n; ++i) {
306+
s += calories[i] - calories[i - k];
307+
if (s < lower) {
308+
--ans;
309+
} else if (s > upper) {
310+
++ans;
311+
}
312+
}
313+
return ans;
248314
}
249315
```
250316

‎solution/1100-1199/1176.Diet Plan Performance/README_EN.md

+95-29
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ class Solution:
8080

8181
```python
8282
class Solution:
83-
def dietPlanPerformance(self, calories: List[int], k: int, lower: int, upper: int) -> int:
83+
def dietPlanPerformance(
84+
self, calories: List[int], k: int, lower: int, upper: int
85+
) -> int:
8486
def check(s):
8587
if s < lower:
8688
return -1
@@ -153,13 +155,19 @@ class Solution {
153155
public:
154156
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
155157
int n = calories.size();
156-
vector<int> s(n + 1);
157-
for (int i = 0; i < n; ++i) s[i + 1] = s[i] + calories[i];
158+
int s[n + 1];
159+
s[0] = 0;
160+
for (int i = 0; i < n; ++i) {
161+
s[i + 1] = s[i] + calories[i];
162+
}
158163
int ans = 0;
159164
for (int i = 0; i < n - k + 1; ++i) {
160165
int t = s[i + k] - s[i];
161-
if (t < lower) --ans;
162-
else if (t > upper) ++ans;
166+
if (t < lower) {
167+
--ans;
168+
} else if (t > upper) {
169+
++ans;
170+
}
163171
}
164172
return ans;
165173
}
@@ -173,12 +181,18 @@ public:
173181
int n = calories.size();
174182
int s = accumulate(calories.begin(), calories.begin() + k, 0);
175183
int ans = 0;
176-
if (s < lower) --ans;
177-
else if (s > upper) ++ans;
184+
if (s < lower) {
185+
--ans;
186+
} else if (s > upper) {
187+
++ans;
188+
}
178189
for (int i = k; i < n; ++i) {
179190
s += calories[i] - calories[i - k];
180-
if (s < lower) --ans;
181-
else if (s > upper) ++ans;
191+
if (s < lower) {
192+
--ans;
193+
} else if (s > upper) {
194+
++ans;
195+
}
182196
}
183197
return ans;
184198
}
@@ -188,13 +202,12 @@ public:
188202
### **Go**
189203

190204
```go
191-
func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
205+
func dietPlanPerformance(calories []int, k int, lower int, upper int) (ans int) {
192206
n := len(calories)
193207
s := make([]int, n+1)
194-
for i, v := range calories {
195-
s[i+1] = s[i] + v
208+
for i, x := range calories {
209+
s[i+1] = s[i] + x
196210
}
197-
ans := 0
198211
for i := 0; i < n-k+1; i++ {
199212
t := s[i+k] - s[i]
200213
if t < lower {
@@ -203,32 +216,85 @@ func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
203216
ans++
204217
}
205218
}
206-
return ans
219+
return
207220
}
208221
```
209222

210223
```go
211-
func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
212-
check := func(s int) int {
213-
if s < lower {
214-
return -1
215-
}
216-
if s > upper {
217-
return 1
218-
}
219-
return 0
220-
}
224+
func dietPlanPerformance(calories []int, k int, lower int, upper int) (ans int) {
221225
n := len(calories)
222226
s := 0
223-
for i := 0; i < k; i++ {
224-
s += calories[i]
227+
for _, x := range calories[:k] {
228+
s += x
229+
}
230+
if s < lower {
231+
ans--
232+
} else if s > upper {
233+
ans++
225234
}
226-
ans := check(s)
227235
for i := k; i < n; i++ {
228236
s += calories[i] - calories[i-k]
229-
ans += check(s)
237+
if s < lower {
238+
ans--
239+
} else if s > upper {
240+
ans++
241+
}
230242
}
231-
return ans
243+
return
244+
}
245+
```
246+
247+
### **TypeScript**
248+
249+
```ts
250+
function dietPlanPerformance(
251+
calories: number[],
252+
k: number,
253+
lower: number,
254+
upper: number,
255+
): number {
256+
const n = calories.length;
257+
const s: number[] = new Array(n + 1).fill(0);
258+
for (let i = 0; i < n; ++i) {
259+
s[i + 1] = s[i] + calories[i];
260+
}
261+
let ans = 0;
262+
for (let i = 0; i < n - k + 1; ++i) {
263+
const t = s[i + k] - s[i];
264+
if (t < lower) {
265+
--ans;
266+
} else if (t > upper) {
267+
++ans;
268+
}
269+
}
270+
return ans;
271+
}
272+
```
273+
274+
```ts
275+
function dietPlanPerformance(
276+
calories: number[],
277+
k: number,
278+
lower: number,
279+
upper: number,
280+
): number {
281+
const n = calories.length;
282+
let s = calories.slice(0, k).reduce((a, b) => a + b);
283+
let ans = 0;
284+
if (s < lower) {
285+
--ans;
286+
} else if (s > upper) {
287+
++ans;
288+
}
289+
for (let i = k; i < n; ++i) {
290+
s += calories[i] - calories[i - k];
291+
if (s < lower) {
292+
--ans;
293+
} else if (s > upper) {
294+
++ans;
295+
}
296+
}
297+
return ans;
232298
}
233299
```
234300

‎solution/1100-1199/1176.Diet Plan Performance/Solution.cpp

+11-6
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@ class Solution {
22
public:
33
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
44
int n = calories.size();
5-
vector<int> s(n + 1);
6-
for (int i = 0; i < n; ++i) s[i + 1] = s[i] + calories[i];
5+
int s = accumulate(calories.begin(), calories.begin() + k, 0);
76
int ans = 0;
8-
for (int i = 0; i < n - k + 1; ++i) {
9-
int t = s[i + k] - s[i];
10-
if (t < lower)
7+
if (s < lower) {
8+
--ans;
9+
} else if (s > upper) {
10+
++ans;
11+
}
12+
for (int i = k; i < n; ++i) {
13+
s += calories[i] - calories[i - k];
14+
if (s < lower) {
1115
--ans;
12-
else if (t > upper)
16+
} else if (s > upper) {
1317
++ans;
18+
}
1419
}
1520
return ans;
1621
}

0 commit comments

Comments
 (0)