百度抽样算法面试题(部分)
2018-02-10 15:16
363 查看
1. 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。解:先选中前k个, 从第k+1个元素到最后一个元素为止, 以k/i (i=k+1, k+2,...,N) 的概率选中第i个元素,并且随机替换掉一个原先选中的元素, 这样遍历一次得到k个元素, 可以保证完全随机选取。这个算法叫做蓄水池抽样,在某门课上听到的,证明起来也不是很复杂。证:最后一个元素选中概率=K/N,倒数第2个元素选中概率=(K/N-1)*(1-(K/N)*(1/K))=K/N,以此类推……2. 如何从n个排序的对象中选择一个,但实现不知道n的大小解:总是选择第一个对象,并使用1/2的概率选择第二个对象,使用1/3的概率选择第三个对象,以此类推。在过程结束时,每个对像被选中的概率都是1/n。3. 给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A
/A[i]。你不能使用除法运算。解:从前往后扫一遍,然后从后往前再扫一遍。也就是说,线性时间构造两个新数组,P[i]=A[1]*A[2]*...*A[i],Q[i]=A
*A[n-1]*...*A[i]。于是,B[i]=P[i-1]*Q[i+1]。
/A[i]。你不能使用除法运算。解:从前往后扫一遍,然后从后往前再扫一遍。也就是说,线性时间构造两个新数组,P[i]=A[1]*A[2]*...*A[i],Q[i]=A
*A[n-1]*...*A[i]。于是,B[i]=P[i-1]*Q[i+1]。
相关文章推荐
- 【转】百度部分算法面试题
- 百度部分算法面试题
- 【算法】2015-2016 阿里、百度、360、豌豆荚、搜狗面试题部分集锦
- 经典面试题(一)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 【白话经典算法系列之十二】数组中只出现1次的两个数字(百度面试题)
- 百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来
- 九度OJ 1504 把数组排成最小的数【算法】-- 2009年百度面试题
- 面试宝典之二 百度算法面试题分析
- 非常有用的101道算法部分常见面试题
- 转:链表相交有环 经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 微软等数据结构+算法面试100题(18)--百度面试题
- 百度算法面试题分析
- 经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 【面试题之算法部分】LIS最长递增子序列
- php面试题之二——数据结构和算法(高级部分)
- 九度OJ 1504 把数组排成最小的数【算法】-- 2009年百度面试题
- 2014百度实习生面试题(部分)详解
- 经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯