You are viewing a single comment's thread. Return to all comments →
Java solution, using LinkedList and Iterator to make remove operation O(1) while avoid copy to stack as well.
public static List<Integer> waiter(List<Integer> number, int q) { if (q == 0) { List<Integer> res = new ArrayList<>(number); Collections.reverse(res); return res; } List<Integer> primes = getPrime(q); int len = number.size(); List<Integer> list = new LinkedList<>(number); List<Integer> answer = new ArrayList<>(len); for (int i = 0; i < q && !list.isEmpty(); i++) { int prime = primes.get(i); Iterator<Integer> it = list.iterator(); while (it.hasNext()) { int num = it.next(); if (num % prime == 0) { answer.add(num); it.remove(); } } Collections.reverse(list); } if (!list.isEmpty()) { Collections.reverse(list); for (Integer e: list) { answer.add(e); } } return answer; } private static int ABBR_SIZE = 6; private static List<Integer> ABBR_PRIME = Arrays.asList(2,3,5,7,11,13); private static List<Integer> getPrime(int n) { if (n <= ABBR_SIZE) { return ABBR_PRIME.subList(0, n); } List<Integer> ans = new ArrayList<>(ABBR_PRIME); int len = ABBR_SIZE; int previous = ABBR_PRIME.get(ABBR_SIZE - 1); while (len < n) { previous++; while (!isPrime(previous)) { previous++; } ans.add(previous); len++; } return ans; } private static boolean isPrime(int n) { for (int i = 2; i <= n / 2; i++) { if (n % i == 0) { return false; } } return true; }
Seems like cookies are disabled on this browser, please enable them to open this website
Waiter
You are viewing a single comment's thread. Return to all comments →
Java solution, using LinkedList and Iterator to make remove operation O(1) while avoid copy to stack as well.