Skip to content

Instantly share code, notes, and snippets.

@nareshdb
Created December 1, 2016 02:30
Show Gist options
  • Save nareshdb/a0e54608afc4d456f422b6bc6da1cb6c to your computer and use it in GitHub Desktop.
Save nareshdb/a0e54608afc4d456f422b6bc6da1cb6c to your computer and use it in GitHub Desktop.
import java.util.*;
class Foo3{
public static void main(String args[]){
int[] l = {4,3,2,1};
answer(l);
}
public static int answer(int[] l){
class GenQueue<E> {
private LinkedList<E> list = new LinkedList<E>();
public void enqueue(E item) {
list.addLast(item);
}
public E dequeue() {
return list.poll();
}
public boolean hasItems() {
return !list.isEmpty();
}
public int size() {
return list.size();
}
public void addItems(GenQueue<? extends E> q) {
while (q.hasItems())
list.addLast(q.dequeue());
}
}
Integer[] ll = new Integer[l.length];
for(int i=0;i<l.length;i++){
ll[i] = l[i];
}
Arrays.sort(ll);
GenQueue<Integer> queue0 = new GenQueue<Integer>();
GenQueue<Integer> queue1 = new GenQueue<Integer>();
GenQueue<Integer> queue2 = new GenQueue<Integer>();
int sum = 0;
for( int i=0 ; i<ll.length ; i++){
sum = sum + ll[i];
if(ll[i] % 3 == 0){
queue0.enqueue(ll[i]);
}
else{
if(ll[i] % 3 == 1){
queue1.enqueue(ll[i]);
}else{
queue2.enqueue(ll[i]);
}
}
}
if ( (sum % 3) == 1 )
{
// either remove one item from queue1
if ( queue1.hasItems() )
queue1.dequeue();
// or remove two items from queue2
else
{
if ( queue2.hasItems() )
queue2.dequeue();
else
return 0;
if ( queue2.hasItems() )
queue2.dequeue();
else
return 0;
}
}
else
if ((sum % 3) == 2)
{
// either remove one item from queue2
if ( queue2.hasItems() )
queue2.dequeue();
// or remove two items from queue1
else
{
if ( queue1.hasItems() )
queue1.dequeue();
else
return 0;
if ( queue1.hasItems() )
queue1.dequeue();
else
return 0;
}
}
int n = queue2.size() + queue1.size() + queue0.size() ;
int[] ans = new int[n];
int i=0;
while(queue0.hasItems()){
ans[i] = queue0.dequeue();
++i;
}
while(queue1.hasItems()){
ans[i] = queue1.dequeue();
++i;
}
while(queue2.hasItems()){
ans[i] = queue2.dequeue();
++i;
}
Arrays.sort(ans);
int ret = 0;
for(int j=i-1 ; j>=0 ; j--){
ret = ret * 10;
ret += ans[j];
}
System.out.println(ret);
return ret;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment