算法随笔(1)

本文解析了两个算法课堂上的小题目:一是寻找数组中的中间数,通过两次遍历找到所有符合条件的元素;二是利用开关判断100个人是否都进入过房间的方法。

9月21日-算法课上的小题目1:中间数

在一个数组中,如{1,6,4,5,7,9,8,10,14,12},存在这样的数:7和10,它们的左边全部比自己小,右边全部比自己大,这样的数成为中间数。设计一个求中间数的算法。

  • 思想:从左边遍历一次数组,求出满足左边全部比自己小的数;从右边遍历一次数组,求出满足右边全部比自己大得数。最后两个集合求交集。Over~

9月22日-算法课上的小题目2:一个开关

房间里有一个开关,开始是关着的,100个人随机地被叫进来,如何确定在何时每个人都进来过至少一次。

  • 思想:选一个人计数,约定只有计数员能关闭开关,每个人进房间后,开关是关着的就打开,开着的就不操作。这样当计数员进房间看到开关打开时,计数加1并关闭开关。计数到99后就可以确定满足要求。(计数员也是概率地被叫进来,所以这个过程会非常漫长。。。)

难度加大版:房间里有一个开关,开关的初始状态未知,所以也没办法事前约定,100个人随机的等概率地依次进来,如何确定在何时每个人都进来过至少一次。

  • 思想:选一个人计数,约定只有计数员能关闭开关。还是跟上面一样的操作,计数到198后就可以确定满足要求。(不用管开关的初始状态,其他99个人每人至少操作了2次)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值