Google foobar失败10例中有3例

时间:2018-09-23 04:11:47

标签: java google-foobar

我正在研究Google foobar挑战,并且我有10次成功7次。测试用例是隐藏的。您可以通过建议测试用例或指出您认为不对的地方来提供帮助吗?

问题:

编写一个名为answer(data,n)的函数,该函数接收少于100个整数和数字n的列表,并返回该列表,但将出现n次以上的所有数字完全删除。返回的列表应保留与原始列表相同的顺序-您不想混淆那些经过精心计划的轮换!例如,如果数据为[5,10,15,10,7]并且n为1,由于10两次出现,因此answer(data,n)将返回列表[5,15,7],因此已从列表中将其删除。完整列出。

语言

要提供Python解决方案,请编辑solution.py 要提供Java解决方案,请编辑solution.java

测试用例

输入:     (整数列表)数据= [1、2、3]     (整数)n = 0 输出:     (int列表)[]

输入:     (整数列表)数据= [1、2、2、3、3、3、4、5、5]     (整数)n = 1 输出:     (整数列表)[1,4]

输入:     (整数列表)数据= [1、2、3]     (整数)n = 6 输出:     (int列表)[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 :(得分:0)

我不能为您提供确切的解决方案,因为这是来自竞争的问题,但是您可以从此python解决方案中获得一些想法。

注意:关于insertion order

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]