Google Foobar терпит неудачу 3 из 10 случаев

Я работаю над Google Foobar Challenge, и мне удается 7 из 10 раз. Контрольные примеры скрыты. Не могли бы вы помочь, предложив контрольные примеры или указав, что вы считаете неправильным?

Вопрос:

Напишите функцию с именем answer (data, n), которая принимает список из менее чем 100 целых чисел и число n и возвращает тот же список, но со всеми числами, встречающимися более n раз, полностью удаленными. Возвращаемый список должен сохранять тот же порядок, что и исходный список - вы не хотите путать эти тщательно спланированные смены! Например, если бы данные были [5, 10, 15, 10, 7] и n был 1, answer (data, n) вернул бы список [5, 15, 7], потому что 10 встречается дважды, и, следовательно, был удален из список целиком

Языки

Чтобы предоставить решение Python, отредактируйте solution.py Чтобы предоставить решение Java, отредактируйте solution.java

Контрольные примеры

Входные данные: (int list) data = [1, 2, 3] (int) n = 0 Выходные данные: (int list) []

Входы: (int list) data = [1, 2, 2, 3, 3, 3, 4, 5, 5] (int) n = 1 Выход: (int list) [1, 4]

Входные данные: (int list) data = [1, 2, 3] (int) n = 6 Выходные данные: (int list) [1, 2, 3]

Код

public static int[] answer(int[] data, int n) 
    {
        HashMap<Integer, Integer> map = new HashMap<>(); 
        ArrayList<Integer> data2 = new ArrayList<Integer>();

        int count=0;

        for(int x:data)
        {
            if(!map.containsKey(x))
            {           
                map.put(x,1);
            }
            else if(map.containsKey(x))
            {
                count=map.get(x);
                count+=1;
                map.put(x,count);
            }
        }

        for(int y:map.keySet())
        {
            if(map.get(y)<=n) {
                data2.add(y);
            }
        }
        int[] data3 = new int[data2.size()];


        for(int i=0;i<data2.size();i++){
            data3[i] = data2.get(i);
        }


        return data3; 
    }

    public static void main(String[] args) {

        int[] thisss = {};

        int[] ans=answer(thisss,1);

        for(int x: ans)
        {
            System.out.println(x);
        }   

    }

1 ответ

Я не могу помочь вам с точным решением, так как это вопрос от конкурентов, но вы можете получить некоторые идеи из этого питона.

Примечание: о порядке ввода

from collections import defaultdict

def answer(data,n):
    data = data[:100]
    counter_dict = defaultdict(int)
    ignore_num_set = set()

    for num in data:

        if num not in ignore_num_set:
            counter_dict[num] +=1
            if counter_dict[num] > n:
                del counter_dict[num]
                ignore_num_set.add(num)

    return list(counter_dict.keys())

print(answer([97,5,10,15,10,7,8,7,5,15,2,3,42],1)) #[97, 8, 2, 3, 42]
Другие вопросы по тегам