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;
                }
        }

  

时间: 2024-08-30 16:20:02

fb 面经- reservior sampling的题目的相关文章

蓄水池抽样Reservior Sampling

编程珠玑第12章练习题10: 如何从n个对象(可以依次看到这n个对象,但事先不知道n的值)中随机选择一个?具体说来,如何在事先不知道文本文件行数的情况下读取文件,从中随机选择并输出一行? 解答:我们总选择 第1行,并以概率1/2选择第2行,以概率1/3选择第3行,依次类推,在这一过程结束时,每一行选中的概率是相等的(都是1/n,其中n是文件的总行数) i = 0; while more input lines with probability 1.0/++i choice = this inpu

Random Pick Index

Given an array of integers with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array. Note: The array size can be very large. Solution that uses too much extra sp

Leetcode: Random Pick Index

Given an array of integers with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array. Note: The array size can be very large. Solution that uses too much extra sp

九度oj 题目1475:IP数据包解析

题目描述: 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节. 传输层的TCP协议数据段的头部格式如下: 头部长度单位为4字节. 你的任务是,简要分析输入数据中的若干个TCP数据段的头部. 详细要求请见输入输出部分的说明. 输入: 第一行为一个整数T,代表测试数据的组数. 以下有T行,每行都是一个TCP数据包的头部分,字节用16进制表示,以空格隔开.数据保证字节之间仅有一个空格,且行首行尾没有多余的

九度oj 题目1012:畅通工程

题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可).问最少还需要建设多少条道路? 输入: 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M:随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号.为简单起见,城镇从1到N编号.     注意:两个城

从一道趣味题目学习正则表达式

前天做了陈皓的趣味竞赛题目(fun.coolshell.cn),一直卡在第四道题目回文猫处不知所以然,看了微博上的提示,知道需要用正则表达式,但是不确定使用表达式的模式和原文,下面是第四道题的截图和链接,不看解析,你可以想到通关的办法吗? 看了答案,才知道source藏在网页的html源码中,曾经有过去看源码的念头,想作者不会这么geek吧,结果...就在源码中,下面是需要搜寻的网页的源码: <!-- h8:[email protected]:V<7Q3:]iqbn58\YoLGtweZus;

HDOJ 题目5097 Page Rank(矩阵运算,模拟)

Page Rank Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Submission(s): 280    Accepted Submission(s): 75 Problem Description Evaluation and rank of web pages is a hot topic for many internet companies and

转载:[Mitbbs]FB的intern和准备的经历

今天中午刚收到f家的intern offer, 超级开心.在这个版块看了很多也收获很多. onsite前天晚上面就就对自己过了一定发个帖跟需要的人分享下自己的经历.论坛上帖 子看了很多,很多拿了FLAG之类公司的人都说自己不是大牛啦,没准备多久啦. LZ 觉 得都太假了. 所以希望LZ的帖子能真正的对之后同学的人有些启发.也给LZ攒攒RP啦. 首先说下背景.本科西安一个万年211的高校的telecommunication,EE很强(西安的同 学应该猜到了是哪个了).本科没做过research.春

NYOJ:题目524 A-B Problem

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=860 My思路: 先用两个字符串储存这两个实数,然后再用另外两个字符串储存去掉符号和前后多余的0后的新"实数",最后只需要比较两个化简后的新字符就ok了. My代码实现: 1 #include<iostream> 2 using namespace std; 3 string simplify(string s) { //去字符串s的正负号和首尾多余的0 4 str