本大菜鸡表示只会编程题其他题都不会
1、无向图判断是否连通,并查集
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(),M = sc.nextInt(),num = N;
int[] point = new int[N + 1];
//每个点作为一个子集
for (int i = 1; i <= N; i++) {
point[i] = i;
}
for (int i = 0; i < M; i++) {
int u = sc.nextInt(),v = sc.nextInt();
int uF = point[u],vF = point[v];
//向上查找根节点
while (point[uF] != uF) {
uF = point[uF];
}
while (point[vF] != vF) {
vF = point[vF];
}
//属于不同子集的合并起来
if (uF != vF) {
int min = Math.min(uF, vF);
point[uF + vF - min] = min;
num--;
}
}
System.out.println(num == 1?"YES":"NO");
sc.close();
} 2、字符串消消乐,消除相邻相同字符
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 0; i < T; i++) {
char[] cArr = sc.next().toCharArray();
LinkedList<Character> list = new LinkedList<Character>();
for(char c : cArr){
list.add(c);
}
boolean flag = true;
while (flag) {
flag = false;
for (int j = 0; j < list.size() - 1;) {
if (list.get(j) == list.get(j + 1)) {
list.remove(j + 1);
list.remove(j);
flag = true;
}else {
j++;
}
}
}
System.out.println(list.size() == 0?"Yes":"No");
}
sc.close();
}

全部评论
(4) 回帖