360安全筆試題記錄
第一個輸入為整數,第二行輸入為一個數組,不同數組代表不同顔色,不同顔色分在不同的框,一個框至少有兩個球,求最少需要的框。
public class Main5 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int[] arr=new int[N];
for(int i=0;i<N;i++){
arr[i]=in.nextInt();
}
Arrays.sort(arr);
int nums=minBucket(arr);
System.out.println(nums);
}
//方法,找出需要最小的bucket數目
private static int minBucket(int[] arr) {
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<arr.length;i++){
if(map.containsKey(arr[i])){
int temp=map.get(arr[i]);
map.put(arr[i], ++temp);
}else{
map.put(arr[i], 1);
}
}
Collection<Integer> values = map.values();
Iterator<Integer> v = values.iterator();
ArrayList<Integer> list=new ArrayList<>();
while(v.hasNext()){
list.add(v.next());
}
Collections.sort(list);
Integer num = list.get(0);
if(num<2){
return 0;
}
int bucket=0;
int i=0;
while(num>=2&&i<list.size()){
if(list.get(i)%num==0){
bucket+=list.get(i)/num;
}else{
bucket=0;
num--;
}
i++;
}
return bucket;
}
}