問題:有n塊石頭,n根木頭,憑外觀無法判斷重量相對輕重,石頭兩兩重量不同,木頭兩兩重量不同,但是任何一塊石頭都有一根木頭與其質量相同,給你乙個天平,將其分成n對質量相同的《石頭,木頭》堆。[注:天平左邊只能放石頭,右邊只能放木頭]
天平兩邊可以放物體a和物體b,這樣就可以a與b的重量大小關係,如果沒有限制條件,那麼就可以利用天平對石頭和木頭分別進行快排,快排以後得到的石頭序列和木頭序列一一對應,問題迎刃而解。由於沒有砝碼,所以不能確切的確定石頭和木頭的質量,只能確定其相對質量關係。
但是,問題限制天平左邊只能放石頭,右邊只能放木頭。這樣,就只能比較石頭和木頭的相對質量大小了。
類似於快速排序,我們可以隨機選擇一塊石頭a,將木頭分為兩堆:
比a重的木頭堆m1
比a輕的木頭堆m2
以及與a重量相等的木頭b,然後用木頭b對石頭進行同樣操作,石頭可以分為兩堆:
比b重的石頭堆n1
比b輕的石頭堆n2
然後m1對n1,m2對n2,分別進行上述過程,時間複雜度為o(nlgn)。
最壞情形下的時間複雜度為o(n^2),為了杜絕最壞情況的發生,可以每次隨機選擇三塊石頭,取質量居中的石頭,不過此時就與備註相矛盾了,在這裡只是提供一種思路。
ES排序值相同順序隨機的問題
es排序值相同順序隨機的問題 es按某一列排序,當值相同出現的先後順序隨機,所以導致前端頁面顯示看起來怪怪的,每次排序都不一樣使用者會認為錯誤。這個玩意是因為es查詢時每個分片單獨查詢最後再歸併,歸併時是隨機的,所以結果是隨機的。解決方式參考 通過乙個額外的列進行排序保證2列加起來不會出現相同的值用...
EL表示式Map取值的隱含問題
el表示式取map中的值,非常簡單 就可以,但是要注意,如果你的numbermap是這樣的 hashmapnumbermap new hashmap numbermap.put 0,零 numbermap.put 1,一 在jsp頁面中 將取不到值,因為el表示式中數字1是long型別 好bt啊,都...
js 陣列物件 排序相同的屬性
有時候我們需要把相同的引數放一起,比如下面陣列物件中,我們需要把spec相同的引數放一起怎麼做呢?localecompare是什麼東西?定義 用本地特定的順序來比較兩個字串。語法 stringobject.localecompare target 引數 target 要以本地特定的順序與 strin...