Skip to content

Commit 024b9db

Browse files
authored
Fixed sonar warnings.
1 parent 84899c5 commit 024b9db

File tree

3 files changed

+63
-76
lines changed
  • src
    • main/java/g1901_2000
    • test/java/g1901_2000/s1904_the_number_of_full_rounds_you_have_played

3 files changed

+63
-76
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,40 @@
11
package g1901_2000.s1904_the_number_of_full_rounds_you_have_played;
22

3-
// #Medium #String #Math #2022_05_11_Time_2_ms_(37.11%)_Space_42.1_MB_(40.55%)
3+
// #Medium #String #Math #2022_05_12_Time_0_ms_(100.00%)_Space_40_MB_(96.23%)
44

55
public class Solution {
6-
public int numberOfRounds(String startTime, String finishTime) {
7-
int rounds = 0;
8-
int startHour = Integer.parseInt(startTime.split(":")[0]);
9-
int endHour = Integer.parseInt(finishTime.split(":")[0]);
10-
int startMin = Integer.parseInt(startTime.split(":")[1]);
11-
int endMin = Integer.parseInt(finishTime.split(":")[1]);
12-
if (endHour < startHour) {
13-
endHour += 24;
14-
} else if (endHour == startHour && endMin < startMin) {
15-
endHour += 24;
6+
private static final int MID_NIGHT_END = 1440;
7+
private static final int MID_NIGHT_START = 0;
8+
private static final int ROUND_INTERVAL = 15;
9+
10+
public int numberOfRounds(String loginTime, String logoutTime) {
11+
int loginSerializeTime = serializeTime(loginTime);
12+
int logoutSerializeTime = serializeTime(logoutTime);
13+
if (logoutSerializeTime - 14 < loginSerializeTime
14+
&& logoutSerializeTime > loginSerializeTime) {
15+
return 0;
16+
}
17+
loginSerializeTime = maskSerializeTime(loginSerializeTime, 14);
18+
logoutSerializeTime = maskSerializeTime(logoutSerializeTime, 0);
19+
if (loginSerializeTime == logoutSerializeTime) {
20+
return 0;
1621
}
17-
if (startHour == endHour) {
18-
if (startMin == 0 && endMin >= 15) {
19-
rounds++;
20-
}
21-
if (startMin <= 15 && endMin >= 30) {
22-
rounds++;
23-
}
24-
if (startMin <= 30 && endMin >= 45) {
25-
rounds++;
26-
}
27-
return rounds;
28-
} else {
29-
// compute all full rounds in the start hour
30-
if (startMin == 0) {
31-
rounds += 4;
32-
} else if (startMin <= 15) {
33-
rounds += 3;
34-
} else if (startMin <= 30) {
35-
rounds += 2;
36-
} else if (startMin <= 45) {
37-
rounds++;
38-
}
22+
if (loginSerializeTime > logoutSerializeTime + 14) {
23+
return calculateFullRounds(loginSerializeTime, MID_NIGHT_END)
24+
+ calculateFullRounds(MID_NIGHT_START, logoutSerializeTime);
25+
}
26+
return calculateFullRounds(loginSerializeTime, logoutSerializeTime);
27+
}
3928

40-
// compute all full rounds in the finish hour
41-
if (endMin >= 45) {
42-
rounds += 3;
43-
} else if (endMin >= 30) {
44-
rounds += 2;
45-
} else if (endMin >= 15) {
46-
rounds++;
47-
}
29+
private int maskSerializeTime(int serializeTime, int mask) {
30+
return (serializeTime + mask) / ROUND_INTERVAL * ROUND_INTERVAL;
31+
}
4832

49-
// compute all full rounds in the all full hours between finishHour and startHour
50-
rounds += (endHour - startHour - 1) * 4;
51-
return rounds;
52-
}
33+
private int serializeTime(String time) {
34+
return Integer.parseInt(time.substring(0, 2)) * 60 + Integer.parseInt(time.substring(3, 5));
35+
}
36+
37+
private int calculateFullRounds(int login, int logout) {
38+
return (logout - login) / ROUND_INTERVAL;
5339
}
5440
}

src/main/java/g1901_2000/s1906_minimum_absolute_difference_queries/Solution.java

+27-31
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import java.util.BitSet;
77

88
public class Solution {
9-
static class SegmentTree {
9+
private static class SegmentTree {
1010
static class Node {
1111
BitSet bits;
1212
int minDiff;
@@ -15,7 +15,7 @@ static class Node {
1515
int len;
1616
int[] nums;
1717
Node[] tree;
18-
static final int inf = 200;
18+
static final int INF = 200;
1919

2020
SegmentTree(int[] nums, int len) {
2121
this.nums = Arrays.copyOf(nums, len);
@@ -25,21 +25,19 @@ static class Node {
2525
}
2626

2727
private void buildTree(int i, int j, int ti) {
28-
if (i > j) {
29-
return;
30-
} else if (i == j) {
31-
Node node = new Node();
32-
node.bits = new BitSet(101);
33-
node.bits.set(nums[i]);
34-
node.minDiff = inf;
35-
36-
tree[ti] = node;
37-
} else {
38-
int mid = i + (j - i) / 2;
39-
buildTree(i, mid, 2 * ti + 1);
40-
buildTree(mid + 1, j, 2 * ti + 2);
41-
42-
tree[ti] = combineNodes(tree[2 * ti + 1], tree[2 * ti + 2]);
28+
if (i <= j) {
29+
if (i == j) {
30+
Node node = new Node();
31+
node.bits = new BitSet(101);
32+
node.bits.set(nums[i]);
33+
node.minDiff = INF;
34+
tree[ti] = node;
35+
} else {
36+
int mid = i + (j - i) / 2;
37+
buildTree(i, mid, 2 * ti + 1);
38+
buildTree(mid + 1, j, 2 * ti + 2);
39+
tree[ti] = combineNodes(tree[2 * ti + 1], tree[2 * ti + 2]);
40+
}
4341
}
4442
}
4543

@@ -57,8 +55,9 @@ private Node combineNodes(Node n1, Node n2) {
5755
}
5856

5957
private int findMinDiff(BitSet bits) {
60-
int first = bits.nextSetBit(1); // minimum value of number is 1.
61-
int minDiff = inf;
58+
// minimum value of number is 1.
59+
int first = bits.nextSetBit(1);
60+
int minDiff = INF;
6261
while (first != -1) {
6362
int next = bits.nextSetBit(first + 1);
6463
if (next != -1) {
@@ -69,42 +68,39 @@ private int findMinDiff(BitSet bits) {
6968
}
7069
first = next;
7170
}
72-
7371
return minDiff;
7472
}
7573

7674
private int findMinAbsDiff(int start, int end, int i, int j, int ti) {
77-
Node node = _findMinAbsDiff(start, end, i, j, ti);
78-
return node.minDiff == inf ? -1 : node.minDiff;
75+
Node node = findMinAbsDiff2(start, end, i, j, ti);
76+
return node.minDiff == INF ? -1 : node.minDiff;
7977
}
8078

81-
private Node _findMinAbsDiff(int start, int end, int i, int j, int ti) {
79+
private Node findMinAbsDiff2(int start, int end, int i, int j, int ti) {
8280
if (i == start && j == end) {
8381
return tree[ti];
8482
}
85-
8683
int mid = i + (j - i) / 2;
8784
if (end <= mid) {
88-
return _findMinAbsDiff(start, end, i, mid, 2 * ti + 1);
85+
return findMinAbsDiff2(start, end, i, mid, 2 * ti + 1);
8986
} else if (start >= mid + 1) {
90-
return _findMinAbsDiff(start, end, mid + 1, j, 2 * ti + 2);
87+
return findMinAbsDiff2(start, end, mid + 1, j, 2 * ti + 2);
9188
} else {
92-
Node left = _findMinAbsDiff(start, mid, i, mid, 2 * ti + 1);
93-
Node right = _findMinAbsDiff(mid + 1, end, mid + 1, j, 2 * ti + 2);
89+
Node left = findMinAbsDiff2(start, mid, i, mid, 2 * ti + 1);
90+
Node right = findMinAbsDiff2(mid + 1, end, mid + 1, j, 2 * ti + 2);
9491
return combineNodes(left, right);
9592
}
9693
}
9794
}
9895

9996
public int[] minDifference(int[] nums, int[][] queries) {
100-
int len = nums.length, qlen = queries.length;
97+
int len = nums.length;
98+
int qlen = queries.length;
10199
SegmentTree st = new SegmentTree(nums, len);
102100
int[] answer = new int[qlen];
103-
104101
for (int i = 0; i < qlen; ++i) {
105102
answer[i] = st.findMinAbsDiff(queries[i][0], queries[i][1], 0, len - 1, 0);
106103
}
107-
108104
return answer;
109105
}
110106
}

src/test/java/g1901_2000/s1904_the_number_of_full_rounds_you_have_played/SolutionTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,9 @@ void numberOfRounds() {
1515
void numberOfRounds2() {
1616
assertThat(new Solution().numberOfRounds("21:30", "03:00"), equalTo(22));
1717
}
18+
19+
@Test
20+
void numberOfRounds3() {
21+
assertThat(new Solution().numberOfRounds("21:30", "21:30"), equalTo(0));
22+
}
1823
}

0 commit comments

Comments
 (0)