Skip to content

Commit f2634fb

Browse files
authored
Merge pull request chipbk10#82 from chipbk10/SlidingWindow
Sliding window
2 parents b0313a6 + 1fbf2a3 commit f2634fb

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
# Favorite:
1818

19-
#### 871, 938, 174, 332, 1368
19+
#### 871, 938, 174, 332, 1368, 1040
2020

2121
# FollowUp:
2222

src/contest/ReadMe.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ReadMe {
1515
// stack: 1190[!] 975[x]
1616
// binary search: 1351[v] 1337[v]
1717
// 2 pointers: 1248[*] 1234[v]
18-
// sliding window: 1208[v] 1040
18+
// sliding window: 1208[v] 1040[!]
1919
// linked-list: 1290[v] 1019[!]
2020
// union-find: 1202[v] 924
2121
// heap: 1054[!] 882
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package slidingwindow;
2+
3+
import java.util.Arrays;
4+
5+
public class Problem1040_MovingStonesUntilConsecutiveII {
6+
7+
public int[] numMovesStonesII(int[] A) {
8+
Arrays.sort(A);
9+
10+
//1234___ 100 200 300
11+
//1234___ 208,209,300
12+
int n = A.length;
13+
int leftRotation = A[n-1] - n + 2 - A[1];
14+
int rightRotation = A[n-2]- A[0] - n + 2;
15+
int highest = Math.max(leftRotation, rightRotation);
16+
17+
int missings, lowest = Integer.MAX_VALUE;
18+
for (int hi = 0, lo = 0; hi < n; hi++) {
19+
while (A[hi] - A[lo] >= n) lo++;
20+
missings = n - (hi-lo+1);
21+
if (missings == 1 && A[hi]-A[lo] == n-2) missings = 2;
22+
lowest = Math.min(lowest, missings);
23+
}
24+
25+
return new int[] {lowest, highest};
26+
}
27+
}

0 commit comments

Comments
 (0)