字节跳动-第二批笔试 油瓶个数

可以使用图的广度遍历完成油瓶数搜索,孤立的点将不会被处理  100%
package algorithm.bytecode;

import java.util.*;

public class First {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String mStr = in.nextLine();
        int m = Integer.valueOf(mStr);

        int[][] mm = new int[m][m];
        for (int i = 0; i < m; i++) {
            String line = in.nextLine();
            mm[i] = parseIntArr(line);
        }
        int result = solution(mm);
        System.out.println(result);

    }

    public static int solution(int[][] data) {
        int length = data.length;
        boolean[] visited = new boolean[length];
        Arrays.fill(visited, false);
        List<List<Integer>> result = new ArrayList<>();

        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < length; i++) {
            if (visited[i]) {
                continue;
            }
            List<Integer> list = new ArrayList<>();
            queue.offer(i);
            visited[i] = true;
            while (!queue.isEmpty()) {
                int current = queue.poll();
                list.add(current);
                for (int k = 0; k < length; k++) {
                    if (visited[k]) continue;
                    // 与current亲密度大于等于3
                    if (data[current][k] >= 3) {
                        queue.offer(k);
                                                visited[k]=true;                
                    }
                }
            }
            result.add(list);
        }
//        System.out.println(result);
        int count = result.size();
        for (int i = 0; i < length; i++) {
            if (!visited[i]) {
                count++;
            }
        }
        return count;
    }

    public static int[] parseIntArr(String line) {
        String[] strings = line.split(" ");
        int[] data = new int[strings.length];
        for (int i = 0; i < strings.length; i++) {
            data[i] = Integer.valueOf(strings[i]);
        }
        return data;
    }
}            


#字节跳动##笔试题目##题解#
全部评论
点赞 回复 分享
发布于 2019-08-25 22:15
#coding=utf-8 import sys if __name__ == "__main__":     # 读取第一行的n     n = int(sys.stdin.readline().strip())     tensor = []     for i in range(n):         line = sys.stdin.readline().strip()         list_ = list(map(int, line.split()))         tensor.append(list_)     rel = set()     num = n     for i in range(n):         for j in range(n):             if tensor[i][j] >= 3:                 if i not in rel and j in rel:                     rel.add(i)                     num -= 1                 elif j not in rel and i in rel:                     rel.add(j)                     num -= 1                 elif j not in rel and i not in rel:                     rel.add(i)                     rel.add(j)                     num -= 1     print(num)
点赞 回复 分享
发布于 2019-08-26 10:46
中国电子云
校招火热招聘中
官网直投
昨天笔记就做对了这一题 还说不上来是啥方***凑的……😓😓
点赞 回复 分享
发布于 2019-08-26 10:47
连通子图个数
点赞 回复 分享
发布于 2019-08-26 12:51

相关推荐

不愿透露姓名的神秘牛友
08-15 16:48
想要一个AK:问题很多加微信私聊 (一个赞十道算法题,我看看有多少)
点赞 评论 收藏
分享
点赞 6 评论
分享
牛客网
牛客企业服务