Skip to content

Commit 9624a21

Browse files
authored
Refactor variable names and add JavaScript example.
1 parent 78f639f commit 9624a21

File tree

3 files changed

+236
-43
lines changed

3 files changed

+236
-43
lines changed

solution/3400-3499/3430.Maximum and Minimum Sums of at Most Size K Subarrays/README.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,102 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3430.Ma
185185

186186
```
187187

188+
#### JavaScript
189+
190+
```js
191+
/**
192+
* @param {number[]} nums
193+
* @param {number} k
194+
* @return {number}
195+
*/
196+
var minMaxSubarraySum = function (nums, k) {
197+
const computeSum = (nums, k, isMin) => {
198+
const n = nums.length;
199+
const prev = Array(n).fill(-1);
200+
const next = Array(n).fill(n);
201+
let stk = [];
202+
203+
if (isMin) {
204+
for (let i = 0; i < n; i++) {
205+
while (stk.length > 0 && nums[stk[stk.length - 1]] >= nums[i]) {
206+
stk.pop();
207+
}
208+
prev[i] = stk.length > 0 ? stk[stk.length - 1] : -1;
209+
stk.push(i);
210+
}
211+
stk = [];
212+
for (let i = n - 1; i >= 0; i--) {
213+
while (stk.length > 0 && nums[stk[stk.length - 1]] > nums[i]) {
214+
stk.pop();
215+
}
216+
next[i] = stk.length > 0 ? stk[stk.length - 1] : n;
217+
stk.push(i);
218+
}
219+
} else {
220+
for (let i = 0; i < n; i++) {
221+
while (stk.length > 0 && nums[stk[stk.length - 1]] <= nums[i]) {
222+
stk.pop();
223+
}
224+
prev[i] = stk.length > 0 ? stk[stk.length - 1] : -1;
225+
stk.push(i);
226+
}
227+
stk = [];
228+
for (let i = n - 1; i >= 0; i--) {
229+
while (stk.length > 0 && nums[stk[stk.length - 1]] < nums[i]) {
230+
stk.pop();
231+
}
232+
next[i] = stk.length > 0 ? stk[stk.length - 1] : n;
233+
stk.push(i);
234+
}
235+
}
236+
237+
let totalSum = 0;
238+
for (let i = 0; i < n; i++) {
239+
const left = prev[i];
240+
const right = next[i];
241+
const a = left + 1;
242+
const b = i;
243+
const c = i;
244+
const d = right - 1;
245+
246+
let start1 = Math.max(a, i - k + 1);
247+
let endCandidate1 = d - k + 1;
248+
let upper1 = Math.min(b, endCandidate1);
249+
250+
let sum1 = 0;
251+
if (upper1 >= start1) {
252+
const termCount = upper1 - start1 + 1;
253+
const first = start1;
254+
const last = upper1;
255+
const indexSum = (last * (last + 1)) / 2 - ((first - 1) * first) / 2;
256+
const constantSum = (k - i) * termCount;
257+
sum1 = indexSum + constantSum;
258+
}
259+
260+
let start2 = upper1 + 1;
261+
let end2 = b;
262+
start2 = Math.max(start2, a);
263+
end2 = Math.min(end2, b);
264+
265+
let sum2 = 0;
266+
if (start2 <= end2) {
267+
const count = end2 - start2 + 1;
268+
const term = d - i + 1;
269+
sum2 = term * count;
270+
}
271+
272+
totalSum += nums[i] * (sum1 + sum2);
273+
}
274+
275+
return totalSum;
276+
};
277+
278+
const minSum = computeSum(nums, k, true);
279+
const maxSum = computeSum(nums, k, false);
280+
return minSum + maxSum;
281+
};
282+
```
283+
188284
<!-- tabs:end -->
189285

190286
<!-- solution:end -->

solution/3400-3499/3430.Maximum and Minimum Sums of at Most Size K Subarrays/README_EN.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,102 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3430.Ma
182182

183183
```
184184

185+
#### JavaScript
186+
187+
```js
188+
/**
189+
* @param {number[]} nums
190+
* @param {number} k
191+
* @return {number}
192+
*/
193+
var minMaxSubarraySum = function (nums, k) {
194+
const computeSum = (nums, k, isMin) => {
195+
const n = nums.length;
196+
const prev = Array(n).fill(-1);
197+
const next = Array(n).fill(n);
198+
let stk = [];
199+
200+
if (isMin) {
201+
for (let i = 0; i < n; i++) {
202+
while (stk.length > 0 && nums[stk[stk.length - 1]] >= nums[i]) {
203+
stk.pop();
204+
}
205+
prev[i] = stk.length > 0 ? stk[stk.length - 1] : -1;
206+
stk.push(i);
207+
}
208+
stk = [];
209+
for (let i = n - 1; i >= 0; i--) {
210+
while (stk.length > 0 && nums[stk[stk.length - 1]] > nums[i]) {
211+
stk.pop();
212+
}
213+
next[i] = stk.length > 0 ? stk[stk.length - 1] : n;
214+
stk.push(i);
215+
}
216+
} else {
217+
for (let i = 0; i < n; i++) {
218+
while (stk.length > 0 && nums[stk[stk.length - 1]] <= nums[i]) {
219+
stk.pop();
220+
}
221+
prev[i] = stk.length > 0 ? stk[stk.length - 1] : -1;
222+
stk.push(i);
223+
}
224+
stk = [];
225+
for (let i = n - 1; i >= 0; i--) {
226+
while (stk.length > 0 && nums[stk[stk.length - 1]] < nums[i]) {
227+
stk.pop();
228+
}
229+
next[i] = stk.length > 0 ? stk[stk.length - 1] : n;
230+
stk.push(i);
231+
}
232+
}
233+
234+
let totalSum = 0;
235+
for (let i = 0; i < n; i++) {
236+
const left = prev[i];
237+
const right = next[i];
238+
const a = left + 1;
239+
const b = i;
240+
const c = i;
241+
const d = right - 1;
242+
243+
let start1 = Math.max(a, i - k + 1);
244+
let endCandidate1 = d - k + 1;
245+
let upper1 = Math.min(b, endCandidate1);
246+
247+
let sum1 = 0;
248+
if (upper1 >= start1) {
249+
const termCount = upper1 - start1 + 1;
250+
const first = start1;
251+
const last = upper1;
252+
const indexSum = (last * (last + 1)) / 2 - ((first - 1) * first) / 2;
253+
const constantSum = (k - i) * termCount;
254+
sum1 = indexSum + constantSum;
255+
}
256+
257+
let start2 = upper1 + 1;
258+
let end2 = b;
259+
start2 = Math.max(start2, a);
260+
end2 = Math.min(end2, b);
261+
262+
let sum2 = 0;
263+
if (start2 <= end2) {
264+
const count = end2 - start2 + 1;
265+
const term = d - i + 1;
266+
sum2 = term * count;
267+
}
268+
269+
totalSum += nums[i] * (sum1 + sum2);
270+
}
271+
272+
return totalSum;
273+
};
274+
275+
const minSum = computeSum(nums, k, true);
276+
const maxSum = computeSum(nums, k, false);
277+
return minSum + maxSum;
278+
};
279+
```
280+
185281
<!-- tabs:end -->
186282

187283
<!-- solution:end -->

solution/3400-3499/3430.Maximum and Minimum Sums of at Most Size K Subarrays/Solution.js

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,45 @@
66
var minMaxSubarraySum = function (nums, k) {
77
const computeSum = (nums, k, isMin) => {
88
const n = nums.length;
9-
const prev = new Array(n).fill(-1);
10-
const next = new Array(n).fill(n);
11-
let stack = [];
9+
const prev = Array(n).fill(-1);
10+
const next = Array(n).fill(n);
11+
let stk = [];
1212

1313
if (isMin) {
1414
for (let i = 0; i < n; i++) {
15-
while (stack.length > 0 && nums[stack[stack.length - 1]] >= nums[i]) {
16-
stack.pop();
15+
while (stk.length > 0 && nums[stk[stk.length - 1]] >= nums[i]) {
16+
stk.pop();
1717
}
18-
prev[i] = stack.length > 0 ? stack[stack.length - 1] : -1;
19-
stack.push(i);
18+
prev[i] = stk.length > 0 ? stk[stk.length - 1] : -1;
19+
stk.push(i);
2020
}
21-
stack = [];
21+
stk = [];
2222
for (let i = n - 1; i >= 0; i--) {
23-
while (stack.length > 0 && nums[stack[stack.length - 1]] > nums[i]) {
24-
stack.pop();
23+
while (stk.length > 0 && nums[stk[stk.length - 1]] > nums[i]) {
24+
stk.pop();
2525
}
26-
next[i] = stack.length > 0 ? stack[stack.length - 1] : n;
27-
stack.push(i);
26+
next[i] = stk.length > 0 ? stk[stk.length - 1] : n;
27+
stk.push(i);
2828
}
2929
} else {
3030
for (let i = 0; i < n; i++) {
31-
while (stack.length > 0 && nums[stack[stack.length - 1]] <= nums[i]) {
32-
stack.pop();
31+
while (stk.length > 0 && nums[stk[stk.length - 1]] <= nums[i]) {
32+
stk.pop();
3333
}
34-
prev[i] = stack.length > 0 ? stack[stack.length - 1] : -1;
35-
stack.push(i);
34+
prev[i] = stk.length > 0 ? stk[stk.length - 1] : -1;
35+
stk.push(i);
3636
}
37-
stack = [];
37+
stk = [];
3838
for (let i = n - 1; i >= 0; i--) {
39-
while (stack.length > 0 && nums[stack[stack.length - 1]] < nums[i]) {
40-
stack.pop();
39+
while (stk.length > 0 && nums[stk[stk.length - 1]] < nums[i]) {
40+
stk.pop();
4141
}
42-
next[i] = stack.length > 0 ? stack[stack.length - 1] : n;
43-
stack.push(i);
42+
next[i] = stk.length > 0 ? stk[stk.length - 1] : n;
43+
stk.push(i);
4444
}
4545
}
4646

47-
let sum = 0;
47+
let totalSum = 0;
4848
for (let i = 0; i < n; i++) {
4949
const left = prev[i];
5050
const right = next[i];
@@ -53,38 +53,39 @@ var minMaxSubarraySum = function (nums, k) {
5353
const c = i;
5454
const d = right - 1;
5555

56-
let s_start = Math.max(a, i - k + 1);
57-
let s_end_candidate = d - k + 1;
58-
let s_upper = Math.min(b, s_end_candidate);
56+
let start1 = Math.max(a, i - k + 1);
57+
let endCandidate1 = d - k + 1;
58+
let upper1 = Math.min(b, endCandidate1);
5959

6060
let sum1 = 0;
61-
if (s_upper >= s_start) {
62-
const num_terms = s_upper - s_start + 1;
63-
const first = s_start;
64-
const last = s_upper;
65-
const sum_s = (last * (last + 1)) / 2 - ((first - 1) * first) / 2;
66-
const sum_k = (k - i) * num_terms;
67-
sum1 = sum_s + sum_k;
61+
if (upper1 >= start1) {
62+
const termCount = upper1 - start1 + 1;
63+
const first = start1;
64+
const last = upper1;
65+
const indexSum = (last * (last + 1)) / 2 - ((first - 1) * first) / 2;
66+
const constantSum = (k - i) * termCount;
67+
sum1 = indexSum + constantSum;
6868
}
6969

70-
let s2_start = s_upper + 1;
71-
let s2_end = b;
72-
s2_start = Math.max(s2_start, a);
73-
s2_end = Math.min(s2_end, b);
70+
let start2 = upper1 + 1;
71+
let end2 = b;
72+
start2 = Math.max(start2, a);
73+
end2 = Math.min(end2, b);
7474

7575
let sum2 = 0;
76-
if (s2_start <= s2_end) {
77-
const count = s2_end - s2_start + 1;
76+
if (start2 <= end2) {
77+
const count = end2 - start2 + 1;
7878
const term = d - i + 1;
7979
sum2 = term * count;
8080
}
8181

82-
sum += nums[i] * (sum1 + sum2);
82+
totalSum += nums[i] * (sum1 + sum2);
8383
}
84-
return sum;
84+
85+
return totalSum;
8586
};
8687

87-
const sumMin = computeSum(nums, k, true);
88-
const sumMax = computeSum(nums, k, false);
89-
return sumMin + sumMax;
88+
const minSum = computeSum(nums, k, true);
89+
const maxSum = computeSum(nums, k, false);
90+
return minSum + maxSum;
9091
};

0 commit comments

Comments
 (0)