偶然看到的面试算法题_最短时间找出十包粉末中的两蓝粉末。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了偶然看到的面试算法题_最短时间找出十包粉末中的两蓝粉末。相关的知识,希望对你有一定的参考价值。

题目:有4个杯子,10包粉末,其中有2包溶于水变蓝,其余无色,粉末溶于水2min才能显现颜色。求找出两包蓝色粉末的最短时间。假设水和粉末用不完。

解:以下给出四种解法,标记10包粉末为(1,2 ... ) 杯子为[1,2,3,4]
首先我想会不会是有某种算法,dp 二分。。@[email protected]。。没有,懵懵的。

 

法一:这是我最初想到的比较傻的方法

  第一趟:[12,34,56,78]  

    每个杯子分别放两包加水融化,剩下两包不管。可能的情况:

  (1)0个杯子变色,说明剩下两包就是蓝粉末

  (2)1个杯子变色,则蓝粉末在这个杯子两包和未融化的两包其中两包,第二趟四包融化一定可以找到

  (3)2个杯子变色,则在这两个杯子的四包粉末中,第二趟可找到

 

法二: 舍友wan(3) ting(2)君想的

  第一趟:[123;456;789;10]

 (1)1个杯子变色,只能在是杯子1-3变色,蓝粉在三种颜色取两个。第二趟可找到

 (2)2个杯子变色,

    - 如果是1/2/3 + 4 变色,则下一趟找1/2/3即可。

    - 如果是123取二,假设是杯1和杯2,则分别在123取1和456取1,第二趟放置[14;25;36;15],分析关系:杯子14有联系,24有联系。

         a. 杯1变色而杯4不变则

 

法三:我从法一和法二来尝试的,成功解决:

  第一趟:[1234; 3456; 5678;78910]

  连续4包,相邻两包有联系,12,23,34,所谓有联系指有两杯子放了相同的粉末

 (1)1杯子蓝,则一定是杯1的12或杯4的9 10,2会引起13蓝,3同理。

 (2)2杯子蓝,则一定是杯1(12)和杯4(9 10)蓝,第二趟在四包中观察即可。不可能是杯子2/3的分析同(1)

 (3)3杯子蓝,则一定是杯子123或456蓝。

     分析123蓝,如果1/2蓝,则5/6一定蓝(4种),二者有依赖,3/4和9/10同理(4种)。答案有8种可能。

     第二趟:[15; 26; 39; 410]

     如果只有一个杯子蓝了,以杯1_15为例,则答案是15,如果两个杯子蓝了,如1_15蓝,则另一蓝杯一定是包含6的2_26。

     以上分析是我在尝试枚举的时候冥冥中感觉他们之间有猫腻于是提取分析特征得出的。

   

法四:面试官给的,我分析了下,好奇妙。这个方法我在想出法一就在看了,没找出规律,看法二觉得很像,到法三终于豁然开朗。

  第一趟:[1234; 2567; 3689; 47910

  每个杯子只有一个独立的,每杯都与另外三杯有一个共同粉末(而且一包粉最多只能放在俩杯里),放置方法:1234放在杯子1,234分别放在杯234,567放在杯子2,67分别放杯子34...

  (1)不可能只有一个杯子蓝,除了1 10,每包粉末都放在两个杯子里。

  (2)两个杯子蓝: 则只能是这两个杯子共有而其他两个杯子无联系的。第一个蓝杯中有两包ab与两个非蓝杯有联系,另一蓝杯中有两包cd与两个非蓝杯有关系。abcd排除后剩下3包粉末。例如杯子12_[1234;2567]蓝,则可能是125

  (3)三个杯子蓝,则可以排除非蓝杯的四种粉末剩下六种可能;一定有一包是这三个蓝杯中两个杯子的共同颜色+另一个杯子与非蓝杯不同的颜色,比如杯12共同_2+杯3_368,或3+256,或6+123。

         注意到粉末158是独立的,即如1蓝则6一定蓝,去掉这三个的就是(2_36,3+26,6+23),则只需检测236即可,为便于理解重写为[6,3,21,5,8; 23,26,36] 。情况分析:

         - 如果出现一蓝杯(只有2/3/6),则和对应的8/5/1组成两包即使蓝色粉末

         - 如果两蓝杯(23,26,36)就是答案

    我突然觉得这是个(排列)组合问题??

法五: ...  

 

枚举的思想有枚举杯子变色的种类和粉末的可能两种方式。

 

以上分析如有错误,欢迎指出~

写本文时想到的,

我舍友强悍的想象力,我强悍的分析力和对比总结力 哈哈哈 配一脸。

APP : 自由选择一个二维码然后识别图中二维码。考虑分享wifi给朋友,自己想看里面的内容不行。微信里有长按识别二维码的怎么做到的呢?? 能识别任何二维码吗?是因为输入的格式还是??

以上是关于偶然看到的面试算法题_最短时间找出十包粉末中的两蓝粉末。的主要内容,如果未能解决你的问题,请参考以下文章

从一道算法面试题看我国信息科技的原创性不足:查找包含所有元素的最短子数组

腾讯php面试题

算法进阶面试题01——KMP算法详解输出含两次原子串的最短串判断T1是否包含T2子树Manacher算法详解使字符串成为最短回文串

算法初级面试题05——哈希函数/表生成多个哈希函数哈希扩容利用哈希分流找出大文件的重复内容设计RandomPool结构布隆过滤器一致性哈希并查集岛问题

前端基础算法面试题

破解大厂算法面试最难动态规划题:将数组分割成元素和相等的两部分