八十四题合集 【微软面试100题 第八十四题】
题目要求
1.a~z包括大小写与0~9组成的N个数,用最快的方式把其中重复的元素挑出来;
2.已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要求你构造一个发生器,使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;...构造一个发生器,使得它构造1、2、3...n的概率均为1/n,要求复杂度最低;
题目分析
1.用最快的方式,即不用考虑内存问题。可以用hash表的方式存储,时间复杂度O(N).
2.已知:P(rand()==0) = p,P(rand()==1) = 1-p;
则构造1/2发生器可以这样:rand()两次就会得到00、01、10、11,则P(rand()rand()==01) = p(1-p),P(rand()rand()==10) = (1-p)p == P(rand()rand()==01);因此当rand()两次得到01则输出0,rand()两次10则输出1,得到11或00就忽略。
同理构造1/3发生器可以这样:rand()三次就会得到000、001、010、011、100、101、110、111,其中001/010/100的概率相同。
......
代码实现
问题1代码:
#include <iostream> using namespace std; void FindDupliStr(char *p); //为什么是122?因为字符z的十进制为122 char Hash[122]; int main(void) { char *str = "dfsfASDFKLJDF4234789230fd"; FindDupliStr(str); return 0; } void FindDupliStr(char *p) { if(p==NULL) return; int len = strlen(p); for(int i = 0;i<len;i++) { if(Hash[p[i]]==0) { Hash[p[i]]=1; } else if(Hash[p[i]]==1) { Hash[p[i]] = 2; cout << p[i] << " "; } } }
很多时候不是我们做不好,而是没有竭尽全力......
posted on 2014-11-25 22:55 tractorman 阅读(306) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?