码迷,mamicode.com
首页 > 其他好文 > 详细

fb 面经- reservior sampling的题目

时间:2017-09-23 10:51:46      阅读:644      评论:0      收藏:0      [点我收藏+]

标签:com   swa   运行时   dom   map   空白   []   扫雷   for   

题目很简单,可惜不是面经。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的题目

标签:com   swa   运行时   dom   map   空白   []   扫雷   for   

原文地址:http://www.cnblogs.com/apanda009/p/7580082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!