package com.interview.algorithms.general;
import com.interview.basics.model.collection.heap.BinaryArrayHeap;
/**
* Created_By: stefanie
* Date: 14-7-31
* Time: 下午10:02
*/
public class C1_42_UglyNumber {
public static class UnduplicateBinaryArrayHeap<T extends Comparable<T>> extends BinaryArrayHeap<T> {
public UnduplicateBinaryArrayHeap(int type) {
super(type);
}
@Override
public void add(T element) {
if(!store.contains(element)){
super.add(element);
}
}
}
public static int[] findNumber(int N){
int[] numbers = new int[N];
numbers[0] = 1;
int i = 2;
int count = 1;
while(count < N){
int tmp = i;
while(tmp%2 == 0) tmp = tmp/2;
while(tmp%3 == 0) tmp = tmp/3;
while(tmp%5 == 0) tmp = tmp/5;
if(tmp == 1){
numbers[count++] = i;
}
i++;
}
return numbers;
}
public static int[] find(int N){
int[] numbers = new int[N];
BinaryArrayHeap<Integer> minHeap = new UnduplicateBinaryArrayHeap<>(BinaryArrayHeap.MIN_HEAD);
minHeap.add(1);
int count = 0;
while(count < N && count + minHeap.size() < 2*N){
int tmp = minHeap.pollHead();
numbers[count++] = tmp;
minHeap.add(tmp * 2);
minHeap.add(tmp * 3);
minHeap.add(tmp * 5);
}
while(count < N) {
numbers[count++] = minHeap.pollHead();
}
return numbers;
}
}