Skip to content

Commit e39b74e

Browse files
committed
689
1 parent 2f716be commit e39b74e

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

689/Solution.java

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
class Solution {
2+
public int[] maxSumOfThreeSubarrays(int[] nums, int k) {
3+
Node[] lefts = new Node[nums.length];
4+
int[] subSums = new int[nums.length];
5+
int tempSum = 0;
6+
for (int i = 0; i < k; i++) {
7+
tempSum += nums[i];
8+
}
9+
int maxVal = tempSum;
10+
int maxValId = 0;
11+
lefts[0] = new Node(tempSum, 0);
12+
subSums[0] = tempSum;
13+
for (int i = 1; i < nums.length - k; i++) {
14+
tempSum = tempSum - nums[i - 1] + nums[i + k - 1];
15+
if (maxVal < tempSum) {
16+
maxVal = tempSum;
17+
maxValId = i;
18+
}
19+
subSums[i] = tempSum;
20+
lefts[i] = new Node(maxVal, maxValId);
21+
}
22+
Node[] rights = new Node[nums.length];
23+
tempSum = 0;
24+
for (int i = nums.length - 1; i >= nums.length - k; i--) {
25+
tempSum += nums[i];
26+
}
27+
rights[nums.length - k] = new Node(tempSum, nums.length - k);
28+
maxVal = tempSum;
29+
maxValId = nums.length - k;
30+
for (int i = nums.length - k - 1; i >= 0; i--) {
31+
tempSum = tempSum + nums[i] - nums[i + k];
32+
if (maxVal <= tempSum) {
33+
maxVal = tempSum;
34+
maxValId = i;
35+
}
36+
rights[i] = new Node(maxVal, maxValId);
37+
}
38+
maxVal = 0;
39+
int[] res = new int[3];
40+
for (int i = k; i <= nums.length - k * 2; i++) {
41+
if (subSums[i] + lefts[i - k].value + rights[i + k].value > maxVal) {
42+
maxVal = subSums[i] + lefts[i - k].value + rights[i + k].value;
43+
res[0] = lefts[i - k].index;
44+
res[1] = i;
45+
res[2] = rights[i + k].index;
46+
}
47+
}
48+
return res;
49+
}
50+
51+
class Node {
52+
int value;
53+
int index;
54+
55+
public Node() {
56+
}
57+
58+
public Node(int value, int index) {
59+
this.value = value;
60+
this.index = index;
61+
}
62+
}
63+
}

689/main.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number[]}
5+
*/
6+
var maxSumOfThreeSubarrays = function(nums, k) {
7+
const lefts = new Array(nums.length)
8+
const rights = new Array(nums.length)
9+
const sumOfSubArr = new Array(nums.length).fill(0)
10+
11+
for (let i = 0; i < k; i++) {
12+
sumOfSubArr[0] += nums[i]
13+
}
14+
for (let i = 1; i <= nums.length - k; i++) {
15+
sumOfSubArr[i] = sumOfSubArr[i - 1] + nums[i + k - 1] - nums[i - 1]
16+
}
17+
18+
let maxSumOfSubArr = 0
19+
let idOfMaxSumOfSubAtt = 0
20+
for (let i = 0; i <= nums.length - k; i++) {
21+
if (maxSumOfSubArr < sumOfSubArr[i]) {
22+
maxSumOfSubArr = sumOfSubArr[i]
23+
idOfMaxSumOfSubAtt = i
24+
}
25+
lefts[i] = idOfMaxSumOfSubAtt
26+
}
27+
28+
idOfMaxSumOfSubAtt = nums.length - k
29+
maxSumOfSubArr = 0
30+
for (let i = nums.length - k; i >= 0; i--) {
31+
if (maxSumOfSubArr <= sumOfSubArr[i]) {
32+
maxSumOfSubArr = sumOfSubArr[i]
33+
idOfMaxSumOfSubAtt = i
34+
}
35+
rights[i] = idOfMaxSumOfSubAtt
36+
}
37+
38+
maxSumOfSubArr = 0
39+
let ans = new Array(3)
40+
for (let i = k; i <= nums.length - 2 * k; i++) {
41+
const leftId = lefts[i - k]
42+
const rightId = rights[i + k]
43+
if (maxSumOfSubArr <= sumOfSubArr[leftId] + sumOfSubArr[i] + sumOfSubArr[rightId]) {
44+
maxSumOfSubArr = sumOfSubArr[leftId] + sumOfSubArr[i] + sumOfSubArr[rightId]
45+
ans = [leftId, i, rightId]
46+
}
47+
}
48+
return ans
49+
};
50+
51+
if (process.env.LZS) {
52+
const assert = require('chai').assert
53+
assert.deepStrictEqual(maxSumOfThreeSubarrays([1,2,1,2,6,7,5,1], 2), [0, 3, 5])
54+
assert.deepStrictEqual(maxSumOfThreeSubarrays([4, 5, 10, 6, 11, 17, 4, 11, 1, 3], 1), [4, 5, 7])
55+
assert.deepStrictEqual(maxSumOfThreeSubarrays([7,13,20,19,19,2,10,1,1,19], 3), [1, 4, 7])
56+
}

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
- [681 Next Closest Time](./681)
127127
- [682 Baseball Game](./682)
128128
- [684 Redundant Connection](./684)
129+
- [689 Maximum Sum of 3 Non-Overlapping Subarrays](./689)
129130

130131
*Q: What is `LZS`? It almost appears inside all files (like js, cpp)?*
131132
A: Briefly speaking, that is an environment variable defined in my System. For unix/linux, you can add a command `export LZS='true'` in `~/.bashrc` such that `process.env.LZS` evaluates to `true` rather than `undefined.`

0 commit comments

Comments
 (0)