字節跳動2019屆校招筆試題

1.世界盃開幕式會在球場C舉行,球場C的球迷看臺可以容納M*N個球迷。在球場售票完成後,現官方想統計此次開幕式一共有多少個球隊球迷羣體,最大的球隊球迷羣體有多少人。

經調研發現,球迷羣體在選座時有以下特性:

同球隊的球迷羣體會選擇相鄰座位,不同球隊的球迷羣體會選擇不相鄰的座位(註解:相鄰包括前後相鄰,左右相鄰,斜對角相鄰)

給定一個M*N的二維球場,0代表該位置沒有坐人,1代表該位置已有選擇,希望輸出球隊羣體個數P,最大的球隊羣體人數Q

輸入描述:

第一行,2個數字,M及N,使用英文逗號分隔

接下來M行,每行N的數字,使用英文逗號分隔

輸出描述:

一行,2個數字,P及Q,使用英文逗號分隔

其中P表示球隊羣體個數,Q表示最大的球隊羣體人數

例:輸入

10,10

0,0,0,0,0,0,0,0,0,0

0,0,0,1,1,0,1,0,0,0

0,1,0,0,0,0,0,1,0,1

1,0,0,0,0,0,0,0,1,1

0,0,0,1,1,1,0,0,0,1

0,0,0,0,0,0,1,0,1,1

0,1,1,0,0,0,0,0,0,0

0,0,0,1,0,1,0,0,0,0

0,0,1,0,0,1,0,0,0,0

0,1,0,0,0,0,0,0,0,0

輸出:6,8

java實現:

public class Problem1 {
    static String input = "10,10\n" +
            "0,0,0,0,0,0,0,0,0,0\n" +
            "0,0,0,1,1,0,1,0,0,0\n" +
            "0,1,0,0,0,0,0,1,0,1\n" +
            "1,0,0,0,0,0,0,0,1,1\n" +
            "0,0,0,1,1,1,0,0,0,1\n" +
            "0,0,0,0,0,0,1,0,1,1\n" +
            "0,1,1,0,0,0,0,0,0,0\n" +
            "0,0,0,1,0,1,0,0,0,0\n" +
            "0,0,1,0,0,1,0,0,0,0\n" +
            "0,1,0,0,0,0,0,0,0,0";

    static class Person {
        int num;
        int reach;

        public Person(int num, int reach) {
            this.num = num;
            this.reach = reach;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "num=" + num +
                    ", reach=" + reach +
                    '}';
        }
    }

    static Person[][] handleInput() {
        String[] lines = input.split("\n");
        String[] first = lines[0].split(",");
        int row = Integer.valueOf(first[0]);
        int col = Integer.valueOf(first[1]);
        Person[][] arr = new Person[row][col];
        String[] line;
        for (int i = 1; i < lines.length; i++) {
            line = lines[i].split(",");
            for (int j = 0; j < line.length; j++) {
                arr[i - 1][j] = new Person(Integer.valueOf(line[j]), 0);
            }
        }
        return arr;
    }

    static void searchMaxPerson(Person[][] arr) {
        int row = arr.length;
        int col = arr[0].length;
        int tmp ;
        int max = 0;
        int count = 0;
        Person cur;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                cur = arr[i][j];
                if (cur.num != 0 && cur.reach == 0) {
                    count ++;
                    tmp = searchAll(arr,i,j);
                    if(tmp > max){
                        max = tmp;
                    }
                }
            }
        }
        System.out.println(count+","+max);
    }

    static int searchAll(Person[][] arr, int r, int c) {
        int row = arr.length;
        int col = arr[0].length;
        if (r >= row || r < 0 || c >= col || c < 0) {
            return 0;
        }
        Person cur = arr[r][c];
        if (cur.num != 0 && cur.reach == 0) {
            cur.reach = 1;
            int n1 = searchAll(arr, r - 1, c) + searchAll(arr, r + 1, c);
            int n2 = searchAll(arr, r - 1, c - 1) + searchAll(arr, r + 1, c + 1);
            int n3 = searchAll(arr, r, c - 1) + searchAll(arr, r, c + 1);
            int n4 = searchAll(arr, r - 1, c + 1) + searchAll(arr, r + 1, c - 1);
            return n1 + n2 + n3 + n4 + 1;
        }
        return 0;
    }

    public static void main(String[] args) {
        Person[][] arr = handleInput();
        searchMaxPerson(arr);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章