這是一道360的筆試題,有幾種顏色的球,每個球有n個。求最少用幾個籃子可以將這些球裝到籃子裏,每個籃子只有一種顏色的球且最少2個球。同一個顏色的球可以裝到不同籃子。
思路:採用最大公約數求。
package mttest;
import java.io.*;
import java.util.*;
import java.util.Map.Entry;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Main2 {
/*請完成下面這個函數,實現題目要求的功能
當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^
******************************開始寫代碼******************************/
static int main(int[] a) {
int len = a.length;
if(len==1)
return 0;
HashMap<Integer, Integer> hashMap = new HashMap<>();
for(int i = 0; i < a.length; i++)
{
if(hashMap.containsKey(a[i]))
hashMap.put(a[i], hashMap.get(a[i])+1);
else
hashMap.put(a[i], 1);
}
int size = hashMap.size();
int[] b = new int[size];
int i = 0;
Set<Entry<Integer,Integer>> entrySet = hashMap.entrySet();
for (Entry<Integer, Integer> entry : entrySet) {
Integer num = entry.getValue();
b[i] = num;
i++;
}
int maxgysarray = maxgysarray(b,b.length);
if(len%maxgysarray != 0 || maxgysarray < 2)
return 0;
else
return len/maxgysarray;
}
//最大公約數的求解步驟
private static int maxgysarray(int[] b, int length) {
int max;
max = maxgys(b[0],b[1]);
for(int i = 1; i < length-1; i++)
max = maxgys(max, b[i]);
return max;
}
private static int maxgys(int a, int b) {
while(a!=0 && b!=0)
{
if(a<b)
b -= a;
else
a -= b;
}
return a==0?b:a;
}
/******************************結束寫代碼******************************/
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int res;
int number = in.nextInt();
int[] a = new int[number];
for(int i = 0; i < number; i++)
a[i] = in.nextInt();
res = main(a);
System.out.println(String.valueOf(res));
}
}