天天看點

360安全筆試題

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;
	}
	
}