我试图解决javadeque上的hackerrank问题。我的代码通过了所有的案例,除了那些有100000个输入的案例。
问题:在这个问题中,给你n个整数。您需要在大小为m的所有可能相邻子数组中找到唯一整数的最大数目。-->所以我们给n个整数,需要找出每个传染子阵(大小为m)中“唯一整数”的个数。然后打印这些“唯一整数”的最大数目。
link: https://www.hackerrank.com/challenges/java-dequeue/problem
我的代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Deque deque = new ArrayDeque<>();
HashSet<Integer> set = new HashSet<>();
int n = in.nextInt();
int m = in.nextInt();
int max=0;
for (int i = 0; i < n; i++) {
int num = in.nextInt();
deque.add(num);
set.add(num);
if(i>=m-1){
if(set.size()>max)max=set.size();
Integer removed=(Integer)deque.removeFirst();
set.remove(removed);
set.add((Integer)deque.peek());
}
}
System.out.println(max);
}
请告诉我我的代码哪里出错了。
1条答案
按热度按时间vktxenjb1#
这条线有什么意义?
我在你的代码里没有看到任何慢的东西。我只是想知道,如果一个集合只告诉你是否有这样一个数字(而不是同一个数字出现了多少次),那么如何使用集合来跟踪唯一的数字。而且你不想一直扫描数据,看看被删除的号码是不是最后一个。
我认为这不是很好/很快的代码,但它似乎通过了测试用例。我通过使用Map(并使用一些代码)来计算窗口中每个整数的数量。