예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 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;
  }