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]