Skip to content

Commit 0d00407

Browse files
committed
feat: add solutions to lc problem: No.1176
No.1176.Diet Plan Performance
1 parent 5aa68ce commit 0d00407

File tree

6 files changed

+392
-0
lines changed

6 files changed

+392
-0
lines changed

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

+172
Original file line numberDiff line numberDiff line change
@@ -58,22 +58,194 @@
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61+
**方法一:前缀和**
62+
63+
先预处理出长度为 $n+1$ 的前缀和数组 $s$,其中 $s[i]$ 表示前 $i$ 天的卡路里总和。
64+
65+
然后遍历前缀和数组 $s$,对于每个位置 $i$,计算 $s[i+k]-s[i]$,即为第 $i$ 天开始的连续 $k$ 天的卡路里总和。根据题意,对于每个 $s[i+k]-s[i]$,判断值与 $lower$ 和 $upper$ 的关系,更新答案即可。
66+
67+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为数组 `calories` 的长度。
68+
69+
**方法二:滑动窗口**
70+
71+
滑动窗口。维护一个长度为 $k$ 的滑动窗口,窗口内元素之和记为 $s$。如果 $s \lt lower$,则分数减 $1$;如果 $ s \gt upper$,则分数加 $1$。
72+
73+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `calories` 的长度。
74+
6175
<!-- tabs:start -->
6276

6377
### **Python3**
6478

6579
<!-- 这里可写当前语言的特殊实现逻辑 -->
6680

6781
```python
82+
class Solution:
83+
def dietPlanPerformance(self, calories: List[int], k: int, lower: int, upper: int) -> int:
84+
s = list(accumulate(calories, initial=0))
85+
ans, n = 0, len(calories)
86+
for i in range(n - k + 1):
87+
t = s[i + k] - s[i]
88+
if t < lower:
89+
ans -= 1
90+
elif t > upper:
91+
ans += 1
92+
return ans
93+
```
6894

95+
```python
96+
class Solution:
97+
def dietPlanPerformance(self, calories: List[int], k: int, lower: int, upper: int) -> int:
98+
def check(s):
99+
if s < lower:
100+
return -1
101+
if s > upper:
102+
return 1
103+
return 0
104+
105+
s, n = sum(calories[:k]), len(calories)
106+
ans = check(s)
107+
for i in range(k, n):
108+
s += calories[i] - calories[i - k]
109+
ans += check(s)
110+
return ans
69111
```
70112

71113
### **Java**
72114

73115
<!-- 这里可写当前语言的特殊实现逻辑 -->
74116

75117
```java
118+
class Solution {
119+
public int dietPlanPerformance(int[] calories, int k, int lower, int upper) {
120+
int n = calories.length;
121+
int[] s = new int[n + 1];
122+
for (int i = 0; i < n; ++i) {
123+
s[i + 1] = s[i] + calories[i];
124+
}
125+
int ans = 0;
126+
for (int i = 0; i < n - k + 1; ++i) {
127+
int t = s[i + k] - s[i];
128+
if (t < lower) {
129+
--ans;
130+
} else if (t > upper) {
131+
++ans;
132+
}
133+
}
134+
return ans;
135+
}
136+
}
137+
```
138+
139+
```java
140+
class Solution {
141+
public int dietPlanPerformance(int[] calories, int k, int lower, int upper) {
142+
int s = 0, n = calories.length;
143+
for (int i = 0; i < k; ++i) {
144+
s += calories[i];
145+
}
146+
int ans = 0;
147+
if (s < lower) {
148+
--ans;
149+
} else if (s > upper) {
150+
++ans;
151+
}
152+
for (int i = k; i < n; ++i) {
153+
s += calories[i] - calories[i - k];
154+
if (s < lower) {
155+
--ans;
156+
} else if (s > upper) {
157+
++ans;
158+
}
159+
}
160+
return ans;
161+
}
162+
}
163+
```
164+
165+
### **C++**
166+
167+
```cpp
168+
class Solution {
169+
public:
170+
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
171+
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 ans = 0;
175+
for (int i = 0; i < n - k + 1; ++i) {
176+
int t = s[i + k] - s[i];
177+
if (t < lower) --ans;
178+
else if (t > upper) ++ans;
179+
}
180+
return ans;
181+
}
182+
};
183+
```
184+
185+
```cpp
186+
class Solution {
187+
public:
188+
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
189+
int n = calories.size();
190+
int s = accumulate(calories.begin(), calories.begin() + k, 0);
191+
int ans = 0;
192+
if (s < lower) --ans;
193+
else if (s > upper) ++ans;
194+
for (int i = k; i < n; ++i) {
195+
s += calories[i] - calories[i - k];
196+
if (s < lower) --ans;
197+
else if (s > upper) ++ans;
198+
}
199+
return ans;
200+
}
201+
};
202+
```
203+
204+
### **Go**
205+
206+
```go
207+
func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
208+
n := len(calories)
209+
s := make([]int, n+1)
210+
for i, v := range calories {
211+
s[i+1] = s[i] + v
212+
}
213+
ans := 0
214+
for i := 0; i < n-k+1; i++ {
215+
t := s[i+k] - s[i]
216+
if t < lower {
217+
ans--
218+
} else if t > upper {
219+
ans++
220+
}
221+
}
222+
return ans
223+
}
224+
```
76225

226+
```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+
}
237+
n := len(calories)
238+
s := 0
239+
for i := 0; i < k; i++ {
240+
s += calories[i]
241+
}
242+
ans := check(s)
243+
for i := k; i < n; i++ {
244+
s += calories[i] - calories[i-k]
245+
ans += check(s)
246+
}
247+
return ans
248+
}
77249
```
78250

79251
### **...**

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

+158
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,171 @@ calories[2] + calories[3] &lt; lower so 1 point is lost.
6565
### **Python3**
6666

6767
```python
68+
class Solution:
69+
def dietPlanPerformance(self, calories: List[int], k: int, lower: int, upper: int) -> int:
70+
s = list(accumulate(calories, initial=0))
71+
ans, n = 0, len(calories)
72+
for i in range(n - k + 1):
73+
t = s[i + k] - s[i]
74+
if t < lower:
75+
ans -= 1
76+
elif t > upper:
77+
ans += 1
78+
return ans
79+
```
6880

81+
```python
82+
class Solution:
83+
def dietPlanPerformance(self, calories: List[int], k: int, lower: int, upper: int) -> int:
84+
def check(s):
85+
if s < lower:
86+
return -1
87+
if s > upper:
88+
return 1
89+
return 0
90+
91+
s, n = sum(calories[:k]), len(calories)
92+
ans = check(s)
93+
for i in range(k, n):
94+
s += calories[i] - calories[i - k]
95+
ans += check(s)
96+
return ans
6997
```
7098

7199
### **Java**
72100

73101
```java
102+
class Solution {
103+
public int dietPlanPerformance(int[] calories, int k, int lower, int upper) {
104+
int n = calories.length;
105+
int[] s = new int[n + 1];
106+
for (int i = 0; i < n; ++i) {
107+
s[i + 1] = s[i] + calories[i];
108+
}
109+
int ans = 0;
110+
for (int i = 0; i < n - k + 1; ++i) {
111+
int t = s[i + k] - s[i];
112+
if (t < lower) {
113+
--ans;
114+
} else if (t > upper) {
115+
++ans;
116+
}
117+
}
118+
return ans;
119+
}
120+
}
121+
```
122+
123+
```java
124+
class Solution {
125+
public int dietPlanPerformance(int[] calories, int k, int lower, int upper) {
126+
int s = 0, n = calories.length;
127+
for (int i = 0; i < k; ++i) {
128+
s += calories[i];
129+
}
130+
int ans = 0;
131+
if (s < lower) {
132+
--ans;
133+
} else if (s > upper) {
134+
++ans;
135+
}
136+
for (int i = k; i < n; ++i) {
137+
s += calories[i] - calories[i - k];
138+
if (s < lower) {
139+
--ans;
140+
} else if (s > upper) {
141+
++ans;
142+
}
143+
}
144+
return ans;
145+
}
146+
}
147+
```
148+
149+
### **C++**
150+
151+
```cpp
152+
class Solution {
153+
public:
154+
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
155+
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 ans = 0;
159+
for (int i = 0; i < n - k + 1; ++i) {
160+
int t = s[i + k] - s[i];
161+
if (t < lower) --ans;
162+
else if (t > upper) ++ans;
163+
}
164+
return ans;
165+
}
166+
};
167+
```
168+
169+
```cpp
170+
class Solution {
171+
public:
172+
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
173+
int n = calories.size();
174+
int s = accumulate(calories.begin(), calories.begin() + k, 0);
175+
int ans = 0;
176+
if (s < lower) --ans;
177+
else if (s > upper) ++ans;
178+
for (int i = k; i < n; ++i) {
179+
s += calories[i] - calories[i - k];
180+
if (s < lower) --ans;
181+
else if (s > upper) ++ans;
182+
}
183+
return ans;
184+
}
185+
};
186+
```
187+
188+
### **Go**
189+
190+
```go
191+
func dietPlanPerformance(calories []int, k int, lower int, upper int) int {
192+
n := len(calories)
193+
s := make([]int, n+1)
194+
for i, v := range calories {
195+
s[i+1] = s[i] + v
196+
}
197+
ans := 0
198+
for i := 0; i < n-k+1; i++ {
199+
t := s[i+k] - s[i]
200+
if t < lower {
201+
ans--
202+
} else if t > upper {
203+
ans++
204+
}
205+
}
206+
return ans
207+
}
208+
```
74209

210+
```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+
}
221+
n := len(calories)
222+
s := 0
223+
for i := 0; i < k; i++ {
224+
s += calories[i]
225+
}
226+
ans := check(s)
227+
for i := k; i < n; i++ {
228+
s += calories[i] - calories[i-k]
229+
ans += check(s)
230+
}
231+
return ans
232+
}
75233
```
76234

77235
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) {
4+
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];
7+
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) --ans;
11+
else if (t > upper) ++ans;
12+
}
13+
return ans;
14+
}
15+
};

0 commit comments

Comments
 (0)