本大菜鸡表示只会编程题其他题都不会
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) 回帖