【字節跳動】2019筆試題--豆油瓶

參加了字節的筆試,白天刷了一整天的18年筆試題(其實就做了2題hhh),感覺會用Map<Integer, List>應該能做出至少兩題,看到豆油後瘋狂思考怎麼用Map的套路解決,直至放棄。後靈光乍現,覺Set大法可行,一試通過90%,趕緊換下一題,望字節大佬批卷手下留情。
第一題如下(當時忘記截圖了,憑印象形容一下題目吧)

題目:抖音中每兩個用戶之間互動超過3次即互爲豆油瓶(更正一下應該是“豆油瓶”),若用戶1與用戶2互動超過3次,用戶2又與用戶3互動超過三次,則用戶1與用戶3也爲豆油瓶。且用戶不能與自身互動(即a[i][i] = 0,i=0,1,2,3…)
例1:
輸入:
3
0 2 4
2 0 0
4 0 0
輸出:2
解析:第一行輸入的是數組的大小,即nxn(例1中是3x3),後面n行即爲n個用戶之間互動的次數(記得似乎是n<1000)
因爲數組中下標爲1的用戶(簡稱用戶1,下同)與用戶0互動只有兩次,所以用戶0是個“獨立的豆油瓶”,另外一個豆油瓶包含了用戶1,2
例2輸入:
4
0 3 4 5
3 0 0 0
4 0 0 0
5 0 0 0
輸出:1

Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[][] arr = new int[num][num];
for (int i = 0; i < num; i++) {
    for (int j = 0; j < num; j++) {
    	//遍歷所有的輸入存放在二維數組中
        arr[i][j] = scanner.nextInt();
    }
}
Set<Integer> set1 = new HashSet<>();
int count = 0;//豆油瓶數
for (int i = 0; i < num; i++) {
    for (int j = i + 1; j < num; j++) {
    	//遍歷數組中每一個值
        if (arr[i][j] >= 3) {
        	//如果arr[i][j]>=3則需要判斷是 新的豆油 還是 已存在的某一個豆油集的補充
        	//如果目前的Set中沒有i和j,則說明是新的豆油集,否則則是補充
            if (!(set1.contains(i) || set1.contains(j))) {
                count++;
            }
            //set可以去重,所以不用擔心重複值
            set1.add(i);
            set1.add(j);

        }
    }
}
//根據觀察認爲,“獨立存在”的豆油瓶這一列/行都爲0,如arr[1][]或arr[][1]都是0,則count數需要+1。這裏計算沒有在set中的用戶數left,left就是所說的行/列都爲0的“獨立豆油”
int left = num - set1.size();
System.out.println(count + left);

考試結束後改進的版本:合併了循環;判斷條件中的>3改成了>=3。不知道對不對(壞笑.jpg),心態小崩,刷了一天的算法題,第一題都沒有100%通過。(感覺10%沒通過就是因爲>3的原因,我同學>=3就通過了)

Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[][] arr = new int[num][num];
Set<Integer> set1 = new HashSet<>();
int count = 0;
for (int i = 0; i < num; i++) {
    for (int j = 0; j < num; j++) {
        arr[i][j] = scanner.nextInt();
        if (arr[i][j] >= 3) {
            if (!(set1.contains(i) || set1.contains(j))) {
                count++;
            }
            set1.add(i);
            set1.add(j);

        }
    }
}
int left = num - set1.size();
System.out.println(count + left);

我踏馬是真的菜( ̄_, ̄ )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章