巧妙變換;及可憐的小老鼠分析
今日面試題:巧妙變換
輸入陣列[a1,a2,...,an,b1,b2,...,bn],建構函式,使得輸出為,[a1,b1,a2,b2,...,an,bn],注意:方法要是in-place的。
======================================
可憐的小老鼠分析
原題
有11瓶酒,只有一瓶有毒。喝酒之後,三天會死,只有三天時間。請問至少需要多少隻老鼠,可以找出9瓶沒有毒的酒。
分析
題目描述很簡單,可我們仍要抓住要點:
- 11瓶,1瓶有毒
- 喝酒之後,三天會死;只有三天時間->即使某一個老鼠沒有被毒死,也不會有時間重複利用了
- 要使用最少個數的老鼠,要找到9瓶沒有毒的
10瓶無毒的,為何要找到9瓶呢?老鼠開始喝酒,第一隻要喝哪些,第二隻要喝哪些呢?現在有什麼依據麼?顯然酒瓶和老鼠都是一樣的,不可區分的。那麼怎麼來選擇哪些老鼠喝哪瓶酒,進而進行判斷呢?這是這個題目的關鍵點、核心點。11個酒瓶,我們對其編號1-11,如下為二進位制的表示,看完二進位制的表示,也許很多同學,就明白了該如何選擇。
編號 | 二進位制 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
觀察每一位的0和1的分佈情況,從右向左,第一位是1的,有6個情況;是0的,有5個情況。這樣,我們可以讓一隻老鼠喝掉都是1的,然後又兩種情況:
- 老鼠死了,說明有毒的那個瓶子的二進位制位從右到左第一位是1.
- 老鼠沒死,說明有毒的那個瓶子的二進位制位從右到左第一位是0.
同樣的,同時,另外兩隻老鼠測試第二位為1的瓶子以及第三位為1的瓶子,分別因為死或者沒死,得到0、1的情況。三隻老鼠,所有可能的情況如下
01情況 | 解釋 |
000 | 三個老鼠都沒死,只可能是1000號瓶子有毒,剩下10個都沒毒 |
001 | 可能有毒的是0001、1001,去掉這兩個,還有9個無毒 |
010 | 0101有毒,10個無毒 |
011 | 0011,1011可能有毒,9個確保無毒 |
100 | 0100有毒,10個無毒 |
101 | 0101有毒,10個無毒 |
110 | 0110有毒,10個無毒 |
111 | 0111有毒,10個無毒 |
根據上面的表格,得到,至少需要三個老鼠。此類的題目分析的思路,就是這樣的,要找到突破口:表示為二進位制的形式。
例如,1w瓶酒,只有一瓶有毒,只有三天時間,老鼠喝了之後,三天才會發作,至少需要多少隻老鼠,才能找到有毒的酒?一樣的思路,就是二進位制位數多了一些。
【分析完畢】
本文來自微信:待字閨中,2013-08-03釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 一款功能簡約到可憐的SQL 客戶端SQL客戶端
- 巧妙運用clip-path,實現CSS形狀變換CSS
- 通過String的不變性案例分析Java變數的可變性Java變數
- 灰度變換函式:對數及對比度拉伸變換函式
- 非隔離DCDC變換器的CCM分析
- 巧妙的CSSCSS
- 仿射變換及其變換矩陣的理解矩陣
- 傅立葉變換頻域時域分析
- 巧妙的煎餅
- java日期時間各種變換及處理Java
- 小波變換與傅立葉變換的區別
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼
- z 變換
- Hough變換
- 霍夫變換圓檢測原理及 OpenCV API 應用OpenCVAPI
- 善用Object.defineProperty巧妙找到修改某個變數的準確程式碼位置Object變數
- Vue-loader 的巧妙玩法Vue
- 巧妙設定job的interval
- ReactiveCocoa 中 RACSignal 所有變換操作底層實現分析(下)React
- ReactiveCocoa 中 RACSignal 所有變換操作底層實現分析(上)React
- Java - 可變引數的使用Java
- z變換與s變換之間的轉換(一些零碎且不嚴謹的想法)
- Python - 可變和不可變物件Python物件
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- PostgreSQL 從熊燦燦一個獲取固定字元的SQL 分析巧妙之處SQL字元
- Z變換(2020.10.21)
- 頻域變換
- 遞迴思想的巧妙理解遞迴
- Java的方法可變長引數Java
- 使用世界變換的逆轉置矩陣對法線進行變換矩陣
- Python可變物件和不可變物件Python物件
- 微軟Surface Pro X拆解,自己就能換硬碟 可維修性變得更好,微軟硬碟
- 不用第三個變數,交換變數的值變數
- java基礎變數的交換Java變數
- 三種交換變數的方法變數
- 【Java】可變引數Java
- php 可變函式PHP函式
- python的不可變物件與可變物件及其妙用與坑Python物件