fb 面经- reservior sampling的题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fb 面经- reservior sampling的题目相关的知识,希望对你有一定的参考价值。

题目很简单,可惜不是面经。reservior sampling的题目. 1point3acres.com/bbs
windows里面的扫雷,给一个h,w和m. 生成一个高度h,宽度w,总共m颗雷的矩阵。要求m颗雷随机分布。
. visit 1point3acres.com for more.
第一个想法是把雷都放在前m个位置,从m+1的位置开始产生一个index小于m+1的位置,然后交换雷的位置。
这一问写的磕磕绊绊,然后结果居然swap function 写错了,有个地方写太快把i写成了j。被指出来了之后很尴尬。 然后小哥又问了运行时间。说了是O(hw)。然后问能不能在O(m)时间内搞定。才想起来正确的reservior sampling的写法

肯定可以做到O(m),方法就是每确定一个雷的位置,就把这个位置置换到队尾,用一个map记录这个置换。目的就是永远保持空白的位置永远连在一起

        
public static void genMine(int[][] grid, int m){
                int limit = grid.length*grid[0].length;
                Random rd= new Random();
                Map<Integer, Integer> swap = new HashMap<>();
                
                while(m-->0){
                        int origP = rd.nextInt(limit);. From 1point 3acres bbs
                        int swapP = swap.getOrDefault(origP, origP);
                        swap.put(origP, swap.getOrDefault(--limit, limit));
                        grid[swapP/grid[0].length][ swapP%grid[0].length] = 1;
                }
        }

  

以上是关于fb 面经- reservior sampling的题目的主要内容,如果未能解决你的问题,请参考以下文章

[fb 面经] intervals sweep line

FB面经 Prepare: Make Parentheses valid

FB面经Prepare: Merge K sorted Array

FB面经 Prepare: K closest point to the origin

一次阿里 P7 的面经,分享给大家

如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组