首頁 > web前端 > js教程 > 紅鼻子報告

紅鼻子報告

DDD
發布: 2024-12-04 19:47:11
原創
200 人瀏覽過

Red-Nosed Reports

代碼來臨 2024 年第 2 天

第 1 部分

只是解決,還是最優解決?這就是問題

只要解決:

  • 將原始順序的清單與兩個副本進行比較,每個副本均已排序,但順序相反。如果匹配,則標準一成功
  • 迭代列表中的每個項目(第一個除外)。追蹤每個項目與前一個項目的差異。如果任何差異為 0 或大於 3,則此測試失敗。

就性能而言,這意味著:
對於標準 1:

  • 兩份列表副本
  • 對每個副本進行排序
  • 比較原始清單兩次 對於標準 2:
  • 檢查每個清單中的每個數字

最佳解:

  • 對於標準 2,我將利用 while 迴圈來檢查後續數字是否有有效差異。這樣,一旦出現不合格差異,其餘號碼將不會被處理
  • 對於標準 1,我將追蹤差異,然後檢查所有值是否小於或大於零

認為這會起作用。只有一種方法可以找到答案。

編寫最佳化演算法

這是我用來辨識標準 2 的程式碼(1、2 或 3 的差異):

  • 我只會「遍歷」列表,直到我發現無效差異(如果有)
  • 一旦捕獲到一個,while 循環就會退出
  • 在 while 迴圈之後,我可以檢查 diffFlag 的結果

這是我用來識別標準 1 的程式碼(所有差異都會增加或減少):

  • 我建立了每個差異的清單
  • 我將絕對值計算移至條件,因為我實際上想捕獲差異的符號
  • 在 while 迴圈之後,我可以檢查差異以查看每個值是正數還是負數

這是捕捉安全報告的最終條件:

總之,我的演算法為範例輸入產生了正確的答案。

它會對我的拼圖輸入做同樣的事情嗎?

是的,sirrreeee! !

甜甜的!

第2部分

好吧...射擊。

這確實讓事情變得有點複雜。

我想避免使用檢查報告每種可能排列的演算法。這需要產生數百萬份報告。

第一個好消息是:

  • 所有安全報告仍可算作安全

對於我的謎題輸入,大約有 200 個不需要我檢查排列。

儘管如此,800/1000 仍然是一個很多的列表來充分探索排列。

老實說,我沒有找到一種方法來避免在不安全報告的每個排列上運行我的演算法。

真糟糕。

是時候新增一個迴圈來迭代不安全報告中的每個數字 - 要刪除的數字,然後檢查變異清單是否通過。

添加排列檢查循環

我最終複製了 while 循環,並添加了行以複製並從每個後續測試報告中刪除一個數字。

程式碼多了。

但是,它有效!我為拼圖輸入產生了正確答案!

問題是:

  • 它會運行...並為我的拼圖輸入產生正確的答案嗎?

讓我們來看看吧...

嗯,它運行了,但我得到的答案只是比我的第 1 部分答案稍大一些。這似乎是錯誤的。

提交也沒什麼壞處吧? ? ?

正確!

神聖的煙霧!

太不可思議了!

解決起來真的很有趣!

四顆金星進入第三天。

帶來更多精彩的謎題!

以上是紅鼻子報告的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板