Skip to content

Instantly share code, notes, and snippets.

@jianminchen
Created September 13, 2018 07:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/2a820c9579eb3d2d3c11afed159370fd to your computer and use it in GitHub Desktop.
Save jianminchen/2a820c9579eb3d2d3c11afed159370fd to your computer and use it in GitHub Desktop.
Sliding window minimum - java implementation - code to study
/*second algorithm:
given an integer array, for example, [3, 5, 4, 6, 5, 9, 7], given an integer k = 3
minArray[0] = min{3, 5, 4}
minArray[1] = min{5, 4, 6}
minArray[2] = min{4, 6, 5},
...*/
/*
arr = [3, 5, 4, 6, 5, 9, 7]
k = 3
res = [3, 4, ]
dq = [2,3]
i = 3
*/
public List<Integer> minSlidingWindow(int[] arr, int k) {
List<Integer> res = new ArrayList<>();
if (k == 0 || arr == null || arr.length == 0 || k > arr.length) return res;
Deque<Integer> dq = new LinkedList<>();
for (int i = 0; i < arr.length; i++) {
// compute min
// popFront of deque while element index < (i - k + 1)
while (!dq.isEmpty() && q.peekFirst() < (i-k+1)) dq.pollFirst();
// maintain min;
while (!dq.isEmpty() && arr[dq.peekLast()] > arr[i]) dq.pollLast();
dq.offerLast(i);
if (i >= k-1)
res.add(arr[dq.peekFirst()]); // ?
}
return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment