2022-12-04 第 322 场周赛

6253. 回环句

class Solution {
    public boolean isCircularSentence(String sentence) {
        int n = sentence.length();
        if (sentence.charAt(0) != sentence.charAt(n-1)) {
            return false;
        }
        String[] str = sentence.split(" ");
        char pre = str[0].charAt(0);
        for (String s : str) {
            if (s.charAt(0) != pre) {
                return false;
            }
            int len = s.length();
            pre = s.charAt(len-1);
        }
        return true;
    }
}

6254. 划分技能点相等的团队

class Solution {
    public long dividePlayers(int[] skill) {
        Arrays.sort(skill);
        int n = skill.length;
        long ans = 0;
        int sum = skill[0] + skill[n-1];
        for (int i = 0; i < n/2; i++) {
            if (sum != skill[i] + skill[n-i-1]) {
                return -1;
            }
            ans += skill[i] * skill[n-i-1];
        }
        return ans;
    }
}

6255. 两个城市间路径的最小分数

并查集 构建并查集,然后找出和1或n相连接的最短边。
最开始想到的是BFS,但不清楚为什么出错了。

class Solution {
    public int minScore(int n, int[][] roads) {
        int[] parents = new int[n+1];
        for (int i = 1; i <= n; i++) {
            parents[i] = i;
        }
        int min = Integer.MAX_VALUE;
        for (int[] arr : roads) {
            union(parents,arr[0],arr[1]);
        }
        int target = find(parents,1);
        for (int[] arr: roads) {
            if (target == find(parents,arr[0])) {
                min = Math.min(min,arr[2]);
            }
        }
        return min;
    }
    
    public void union(int[] parents, int a, int b) {
        int ai = find(parents,a);
        int bi = find(parents,b);
        parents[ai] = bi;
        parents[a] = bi;
    }
    public int find(int[] parents, int x) {
        if (parents[x] != x) {
            parents[x] = find(parents,parents[x]);
            return parents[x];
        }
        return x;
    }
//     class edge {
//         int a;
//         int b;
//         int d;
//         edge(int a, int b, int d) {
//             this.a = a;
//             this.b = b;
//             this.d = d;
//         }
//     }
//     public int minScore(int n, int[][] roads) {
        
//         List<edge>[] arr = new List[n+1];
//         for (int i = 0; i <= n; i++) {
//             arr[i] = new ArrayList<>();
//         }
//         for (int[] road : roads) {
//             edge e1 = new edge(road[0],road[1],road[2]);
//             edge e2 = new edge(road[1],road[0],road[2]);
//             arr[road[0]].add(e1);
//             arr[road[1]].add(e2);
//         }
//         int a1 = bfs(arr,new boolean[n+1],1);
//         int a2 = bfs(arr,new boolean[n+1],n);
//         return Math.min(a1,a2);
//     }
    
//     public int bfs(List<edge>[] arr, boolean[] visited, int src) {
//         Queue<Integer> queue = new LinkedList<>();
//         queue.offer(src);
//         int min = Integer.MAX_VALUE;
//         visited[src] = true;
//         while (!queue.isEmpty()) {
//             int size = queue.size();
//             for (int i = 0; i < size; i++) {
//                 int tmp = queue.poll();
//                 List<edge> list = arr[tmp];
//                 for (edge e : list) {
//                     if (visited[e.b]) {
//                         continue;
//                     }
//                     min = Math.min(min,e.d);
//                     queue.offer(e.b);
//                     visited[e.b] = true;
//                 }
//             }
//         }
//         return min;
//     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值