java版:
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
HashSet set = new HashSet();
set.add(0);;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] param = br.readLine().split(" ");
int n = Integer.parseInt(param[0]);
int k = Integer.parseInt(param[1]);
int x, y;
int cnt = 0;
while(k != 0){
k--;
param = br.readLine().split(" ");
x = Integer.parseInt(param[0]);
y = Integer.parseInt(param[1]);
if(!set.contains(y)) cnt++;
set.add(x);
}
System.out.println(cnt);
br.close();
}
}
刚开始用的是ArrayList的contains方法,但是会超时。改为HashSet的contains方法后效率快很多。
原因:
ArraysList的contains方法是采用indexOf遍历数据的方式判断存在性,当元素非常多时,这种方式方式非常低,时间复杂度为o(n);
HashSet的contains方法是采用HashMap的containsKey方法,根据key计算hash值,然后取对应链表判断存在性,时间复杂度为o(1),效率比ArrayList高很多
HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存储、查找、删除性能。
参考链接:https://blog.csdn.net/zouh22/article/details/108495848