class Solution {
public int maxArea(int[] height) {
int i = 0;
int j = height.length - 1;
int max = 0;
while (i < j) {
if (height[i] < height[j]) {
int area = (j - i) * height[i];
max = Integer.max(max, area);
i++;
} else {
int area = (j - i) * height[j];
max = Integer.max(max, area);
j--;
}
}
return max;
}
}
class Solution {
List<Integer> path = new ArrayList<>();
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
int sum = 0;
combinationSum3(k, n, sum, 1);
return result;
}
private void combinationSum3(int k, int n, int sum, int startX) {
if (path.size() == k) {
if (sum == n) {
result.add(new ArrayList<>(path));
}
return;
}
if (sum > n) {
return;
}
for (int i = startX; i <= 9 - (k - path.size()) + 1; i++) {
path.add(i);
sum += i;
combinationSum3(k, n, sum, i + 1);
path.remove(path.size() - 1);
sum -= i;
}
}
}
class Solution {
LinkedList<Integer> queue = new LinkedList<>();
public int[] maxSlidingWindow(int[] nums, int k) {
List<Integer> res = new ArrayList<>(nums.length);
for (int i = 0; i < nums.length; i++) {
if (i >= k) {
pop(nums[i - k]);
}
offer(nums[i]);
if (i + 1 >= k) {
res.add(peek());
}
}
return res.stream().mapToInt(Integer::intValue).toArray();
}
public void offer(int val) {
while (!queue.isEmpty() && val > queue.peekLast()) {
queue.removeLast();
}
queue.addLast(val);
}
public int peek() {
return queue.peekFirst();
}
public void pop(int val) {
if (!queue.isEmpty() && val == queue.peekFirst()) {
queue.pollFirst();
}
}
}