/** * Get a new {@link RingoWorker}. * * @return a worker instance. */ public RingoWorker getWorker() { RingoWorker worker = workers.pollFirst(); if (worker == null) { worker = new RingoWorker(this); } return worker; }
public int inc(int bom, int dis) { bom %= size; if (bom == 0) { bom = size; } Deque<Integer> tempStack = new LinkedList<Integer>(); for (int i = 0; i < bom; i++) { tempStack.offerLast(stack.pollFirst() + dis); } for (int i = 0; i < bom; i++) { stack.offerFirst(tempStack.pollLast()); } return stack.peekLast(); }
public String removeDuplicateLetters(String s) { Deque<Character> stack = new LinkedList<>(); Map<Character, Integer> count = new HashMap<>(); for (int i = 0; i < s.length(); i++) { count.compute( s.charAt(i), (key, val) -> { if (val == null) { return 1; } else { return val + 1; } }); } Set<Character> visited = new HashSet<>(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); count.put(ch, count.get(ch) - 1); if (visited.contains(ch)) { continue; } while (!stack.isEmpty() && stack.peekFirst() > ch && count.get(stack.peekFirst()) > 0) { visited.remove(stack.peekFirst()); stack.pollFirst(); } stack.offerFirst(ch); visited.add(ch); } StringBuffer buff = new StringBuffer(); while (!stack.isEmpty()) { buff.append(stack.pollLast()); } return buff.toString(); }
/** * @param nums: A list of integers. * @return: The maximum number inside the window at each moving. */ public ArrayList<Integer> maxSlidingWindow(int[] nums, int k) { // write your code here ArrayList<Integer> ans = new ArrayList<Integer>(); Deque<Integer> deque = new ArrayDeque<Integer>(); int i = 0; for (int now : nums) { i++; while (!deque.isEmpty() && now > deque.peekLast()) { deque.pollLast(); } deque.offer(now); if (i > k && deque.peekFirst() == nums[i - k - 1]) { deque.pollFirst(); } if (i >= k) { ans.add(deque.peekFirst()); } } return ans; }