View difference between Paste ID: hv6ejyib and LDTapVBL
SHOW: | | - or go back to the newest paste.
1
// Author : Saurav Kalsoor
2-
// Minimize Unique Numbers - JAVA
2+
// Basket Full of Balls - JAVA
3
4
5
import java.util.*;
6
7
public class Test {
8
    
9-
        int n = sc.nextInt();
9+
10
 
11
    public static void main(String[] args) {
12-
        ArrayList<Integer> arr = new ArrayList<>();
12+
    	int n = sc.nextInt();
13-
		for(int i = 0;i < n; i++){
13+
14
15
		ArrayList<Integer> arr = new ArrayList<>();
16-
        
16+
		for(int i=0; i < n ;i++){
17-
		System.out.println(minimizeUnique(arr, k));
17+
18
		}
19
20-
    public static int minimizeUnique(ArrayList<Integer> arr, int k){
20+
		System.out.println(bucketFullOfBalls(n, k, arr));
21
    }
22
23-
		for(int num : arr){
23+
	public static int bucketFullOfBalls(int n, int k, ArrayList<Integer> arr){
24-
			count.put(num, count.getOrDefault(num, 0) + 1);
24+
25
		for(int x : arr){
26
			count.put(x, count.getOrDefault(x, 0) + 1);
27-
		Set<MyPair> st = new TreeSet<>(new Comparator<MyPair>() {
27+
28-
			@Override
28+
29-
			public int compare(MyPair a, MyPair b) {
29+
		ArrayList<Integer> temp = new ArrayList<>();
30-
				if(a.second == b.second)
30+
		for(Map.Entry<Integer, Integer> m : count.entrySet()){
31-
					return a.first - b.first;
31+
			if(m.getValue() >= k){
32-
				return a.second - b.second;
32+
				temp.add(m.getKey());
33
			}
34-
		});
34+
35
36-
		for(Map.Entry<Integer, Integer> x : count.entrySet()){
36+
		int m = temp.size();
37-
			st.add(new MyPair(x.getKey(), x.getValue()) );
37+
		if(m == 0){
38-
		} 
38+
			return -1;
39
		}
40-
		int res = st.size();
40+
41
42-
		for(MyPair x : st){
42+
43-
			if(k >= x.second){
43+
		int l = temp.get(0), r = l, i = 1;
44-
				res--;
44+
		while(i < m){
45-
				k -= x.second;
45+
			int j = i - 1;
46-
			}else{
46+
			while(i < m && temp.get(i) == temp.get(i-1) + 1){
47-
				break;
47+
				i++;
48
			}
49
			i--;
50
	
51-
		return res;
51+
			if(temp.get(i) - temp.get(j) > r - l){
52
				l = temp.get(j);
53
				r = temp.get(i);
54
			}
55
56-
class MyPair{
56+
			i+=2;
57-
	public int first, second;
57+
58
59-
	public MyPair(int first, int second){
59+
		return r - l;
60-
		this.first = first;
60+
61-
		this.second = second;
61+
62