Google Foobar терпит неудачу 3 из 10 случаев - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю над заданием Google foobar, и мне удается 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 Ответ

0 голосов
/ 23 сентября 2018

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

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

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]
...