演算法的優雅(二)天平的煩惱

2021-06-09 20:25:08 字數 1464 閱讀 2621

先來到簡單的題目引入:

有140g的麵粉,給你乙個天平,乙個2g砝碼和乙個5g砝碼,讓你在三次稱量內將 麵粉分成90g和50g。

這是人人上傳聞的一道tx筆試題,不過不是很難,想一下不難得出答案:

第一次稱量:將麵粉分成70g和70g兩堆。

第二次稱量:將一堆70g麵粉分成35g和35g,之後將其中乙個35g和70g合成105g。

第三次稱量:用5g砝碼,將105g分成50g+5g和55g兩堆,之後55g和35g合成90g。

2g砝碼連用都沒用上......

下面,我們來看看網上盛傳的那道題:

有12個小球,外形相同,其中乙個小球的質量與其他11個不同,給乙個天平,問如何用3次把這個小球找出來,並且求出這個小球是比其他的輕還是重。

這道題有傳聞是google的,也有傳聞是微軟的,不管是哪個公司的,總之是乙個比較不錯題,下面先讓我們看一下這道題的思路:

第一次,先將1-4號放在左邊,5-8號放在右邊

if (右重)

else

if (平衡)

else

if (左重)

}else

if (平衡)

else

if (平衡)

else

if (左重)

}else

if (左重)

else

if (平衡)

else

if (左重)

}}else

if (平衡)

else

if (平衡)

else

if (左重)

}else

if (平衡)

else

if (平衡)

else

if (左重)

}else

if (左重)

else

if (平衡)

else

if (左重)

}}else

if (左重)

else

if (平衡)

else

if (左重)

}else

if (平衡)

else

if (平衡)

else

if (左重)

}else

if (左重)

else

if (平衡)

else

if (左重)

}}

上面就是層次感比較強的解法

不難看出來,這類題的思路就是分治,2分或者3分什麼的,列舉出各種情況,然後繼續分....有一點分治加模擬的樣式。

不過分治也要有技巧,比如上面這道題,因為有3次的限制,所以必須每次分治都要能縮短目標的範圍,並且確定出輕重,這種技巧就是維持乙個區間的靜和乙個區間的動。

分治是資料結構課講過的,模擬思路....小學就有了吧,至於技巧,就是思維的訓練和數感了。

蠻好玩的二天

能和朋友一起玩,真的好幸福,再大的煩惱都會消除的 呵呵,打牌,好玩,下次出來一定要再打那種牌 上次還和小白說過,下次我們 出來的時候,一起玩殺人遊戲呢,可惜少了乙個人,嗯,不知何時,七個人才會再聚在一起?好難的說 不過,也一定要找個機會,畢業之後,好像已經不可能了 想重灌系統,不經意之間,我又翻出來...

演算法效率的度量方法(第二天)

本章內容可分為 如何來度量乙個演算法的執行時間呢?演算法的時間複雜度 演算法的空間複雜度 上章中,我們提到設計演算法要盡量的提高效率,這裡效率高一般指的是演算法的執行時間。所謂 是騾子是馬拉出來遛遛 比較容易想到的方法就是我們把演算法跑若干次,然後拿個 計時器 在旁邊計時。這種方法便為 事後統計方法...

vue的第二天

輸入關鍵字搜尋 刪除 foreach,some,filter,findindex屬於新陣列方法 indexof item 1屬於包含,item.name.includes 也屬於包含,有就返回true 根據關鍵字搜尋,1.使用foreach,some,filter,findindex來遍歷陣列 2....