【发布时间】:2017-03-23 21:05:49
【问题描述】:
我有这个带有 break 语句的简单 sn-p 代码。我试图解决这个http://codeforces.com/contest/787/problem/B。我想出了这个解决方案:
public static void main(String[] args) {
FastReader in = new FastReader();
int n = in.nextInt(), m = in.nextInt();
HashSet<Integer> set = new HashSet<>();
for(int i=0;i<m;i++){
set.clear();
int k = in.nextInt();
boolean cancel = true;
for(int j=0;j<k;j++){
int cur = in.nextInt();
if(set.contains(-cur)){
cancel = false;
break;
}
else set.add(cur);
}
if(cancel && k!=0){
System.out.println("YES");
return;
}
}
System.out.println("NO");
}
它没有通过测试,但是在我删除了 cancel = false 之后的 break 语句的那一刻;线。有用。我似乎无法解释使用 break 语句有什么不同,这样当您第一次在 set 中找到 -cur 时,您会将 cancel 更改为 false 然后 break 并分配 false 以取消每次您在 set 中找到 -cur 并等待直到循环结束并且不中断。
【问题讨论】:
-
break语句适用于 inner 循环。而cancel为假,所以外循环继续。