Bloomberg电面pass

BB家的base一直很高,所以还是很不错的!让学姐内推之后拿到onsite。
ok,言归正传,BB家的店面我的是一个印度小哥哥,但是!没什么口音,听起来就知道很老实很nice的那种。

第一题是,给你一个random函数,说白了就是给你定义好了,你不需要比如java的Math.random(),直接调用就好。写一个function能shuffle一副扑克牌。这个一套牌呢就是存着1到52的数组,这题就是直接shuffle这个数组就好。这里一开始没懂他shuffle什么意思,问了一下之后知道,更明确点就是求所有的permutation。例子如下:
// input: [2, 1, 3]
// ONE OF: [1, 2, 3] || [1, 3, 2] || [2, 1, 3] || [2, 3, 1] || [3, 1, 2] || [3, 2, 1]
后来发现是利口的原题改编,大家可以看这题,只需要实现shuffle就可以。
https://leetcode.com/problems/shuffle-an-array/description/

第二题是,利扣200, number of islands,dfs写的,但是BB的人貌似都是用自己的一套解法,好像对dfs的解法不是很满意。建议大家用其他解法比如union found。并且dfs写到最后他要我考虑diagonal。所以要考虑8个方向。

过了4天到5天把,给告诉要onsite。后续再补充哈!

贴下第一题的解法吧~

public class Solution {
    public static void main(String args[] ) throws Exception {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT */
        int[] nums = {2, 1, 3};
        System.out.println(shuffle(nums));
    }

    public static shuffle(int[] cards) {
        // int[] res = new int[cards.length];
        for (int i = 0; i < cards.length; i++) {
            int randomIndex = random(0, i);
            swap(cards, randomIndex, i);
        }
        return cards;
    }
    
    private void swap(int[] cards, int left, int right) {
        int tmp = cards[left];
        cards[left] = cards[right];
        cards[right] = tmp;
    }
}
3 Likes