Skip to content

Commit c32b579

Browse files
committed
test: 3439 solution
py, c++, go, java
1 parent 9af072d commit c32b579

File tree

6 files changed

+98
-23
lines changed

6 files changed

+98
-23
lines changed

problems/problems_3439/Solution.cpp

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,52 @@
11
//go:build ignore
22
#include "cpp/common/Solution.h"
33

4-
54
using namespace std;
65
using json = nlohmann::json;
76

87
class Solution {
98
public:
10-
int maxFreeTime(int eventTime, int k, vector<int>& startTime, vector<int>& endTime) {
11-
9+
int maxFreeTime(int eventTime, int k, const vector<int> &startTime,
10+
const vector<int> &endTime) {
11+
int n = startTime.size();
12+
13+
auto getDistance = [&](int idx) {
14+
if (idx == 0) {
15+
return startTime[0];
16+
} else if (idx == n) {
17+
return eventTime - endTime[n - 1];
18+
} else {
19+
return startTime[idx] - endTime[idx - 1];
20+
}
21+
};
22+
23+
int cur = 0;
24+
for (int i = 0; i <= k; ++i) {
25+
cur += getDistance(i);
26+
}
27+
int ans = cur;
28+
for (int i = k + 1; i <= n; ++i) {
29+
cur += getDistance(i) - getDistance(i - k - 1);
30+
ans = max(ans, cur);
1231
}
32+
return ans;
33+
}
1334
};
1435

1536
json leetcode::qubh::Solve(string input_json_values) {
16-
vector<string> inputArray;
17-
size_t pos = input_json_values.find('\n');
18-
while (pos != string::npos) {
19-
inputArray.push_back(input_json_values.substr(0, pos));
20-
input_json_values = input_json_values.substr(pos + 1);
21-
pos = input_json_values.find('\n');
22-
}
23-
inputArray.push_back(input_json_values);
37+
vector<string> inputArray;
38+
size_t pos = input_json_values.find('\n');
39+
while (pos != string::npos) {
40+
inputArray.push_back(input_json_values.substr(0, pos));
41+
input_json_values = input_json_values.substr(pos + 1);
42+
pos = input_json_values.find('\n');
43+
}
44+
inputArray.push_back(input_json_values);
2445

25-
Solution solution;
26-
int eventTime = json::parse(inputArray.at(0));
27-
int k = json::parse(inputArray.at(1));
28-
vector<int> startTime = json::parse(inputArray.at(2));
29-
vector<int> endTime = json::parse(inputArray.at(3));
30-
return solution.maxFreeTime(eventTime, k, startTime, endTime);
46+
Solution solution;
47+
int eventTime = json::parse(inputArray.at(0));
48+
int k = json::parse(inputArray.at(1));
49+
vector<int> startTime = json::parse(inputArray.at(2));
50+
vector<int> endTime = json::parse(inputArray.at(3));
51+
return solution.maxFreeTime(eventTime, k, startTime, endTime);
3152
}

problems/problems_3439/Solution.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,26 @@
77

88
public class Solution extends BaseSolution {
99
public int maxFreeTime(int eventTime, int k, int[] startTime, int[] endTime) {
10-
10+
int n = startTime.length;
11+
int[] dist = new int[n + 1];
12+
dist[0] = startTime[0];
13+
dist[n] = eventTime - endTime[n - 1];
14+
int cur = dist[0];
15+
for (int i = 1; i <= k; ++i) {
16+
if (i < n) {
17+
dist[i] = startTime[i] - endTime[i - 1];
18+
}
19+
cur += dist[i];
20+
}
21+
int ans = cur;
22+
for (int i = k + 1; i <= n; ++i) {
23+
if (i < n) {
24+
dist[i] = startTime[i] - endTime[i - 1];
25+
}
26+
cur += dist[i] - dist[i - k - 1];
27+
ans = Math.max(ans, cur);
28+
}
29+
return ans;
1130
}
1231

1332
@Override

problems/problems_3439/solution.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,27 @@ import (
66
"strings"
77
)
88

9-
func maxFreeTime(eventTime int, k int, startTime []int, endTime []int) int {
10-
9+
func maxFreeTime(eventTime int, k int, startTime []int, endTime []int) (ans int) {
10+
n := len(startTime)
11+
getDistance := func(idx int) int {
12+
if idx == 0 {
13+
return startTime[0]
14+
}
15+
if idx == n {
16+
return eventTime - endTime[n-1]
17+
}
18+
return startTime[idx] - endTime[idx-1]
19+
}
20+
cur := 0
21+
for i := range k + 1 {
22+
cur += getDistance(i)
23+
}
24+
ans = cur
25+
for i := k + 1; i <= n; i++ {
26+
cur += getDistance(i) - getDistance(i-k-1)
27+
ans = max(ans, cur)
28+
}
29+
return
1130
}
1231

1332
func Solve(inputJsonValues string) any {

problems/problems_3439/solution.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,20 @@ def solve(self, test_input=None):
77
return self.maxFreeTime(*test_input)
88

99
def maxFreeTime(self, eventTime: int, k: int, startTime: List[int], endTime: List[int]) -> int:
10-
pass
10+
n = len(startTime)
1111

12+
def get_dist(idx):
13+
if idx == 0:
14+
return startTime[0]
15+
if idx == n:
16+
return eventTime - endTime[-1]
17+
return startTime[idx] - endTime[idx - 1]
18+
19+
cur = 0
20+
for i in range(k + 1):
21+
cur += get_dist(i)
22+
ans = cur
23+
for i in range(k + 1, n + 1):
24+
cur += get_dist(i) - get_dist(i - k - 1)
25+
ans = max(ans, cur)
26+
return ans

problems/problems_3439/testcase

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
["5\n1\n[1,3]\n[2,5]", "10\n1\n[0,2,9]\n[1,4,10]", "5\n2\n[0,1,2,3,4]\n[1,2,3,4,5]"]
2-
[2, 6, 0]
1+
["5\n1\n[1,3]\n[2,5]", "10\n1\n[0,2,9]\n[1,4,10]", "5\n2\n[0,1,2,3,4]\n[1,2,3,4,5]", "21\n1\n[7,10,16]\n[10,14,18]"]
2+
[2, 6, 0, 7]

problems/problems_3439/testcase.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def __init__(self):
1010
self.testcases.append(case(Input=[5, 1, [1, 3], [2, 5]], Output=2))
1111
self.testcases.append(case(Input=[10, 1, [0, 2, 9], [1, 4, 10]], Output=6))
1212
self.testcases.append(case(Input=[5, 2, [0, 1, 2, 3, 4], [1, 2, 3, 4, 5]], Output=0))
13+
self.testcases.append(case(Input=[21,1,[7,10,16],[10,14,18]], Output=7))
1314

1415
def get_testcases(self):
1516
return self.testcases

0 commit comments

Comments
 (0)