繁星點點滴滴
2022-10-27 14:43:47
我有一個對象數組:[
{
score: 1,
},
{
score: 2,
},
{
score: 4,
},
]我有一個給定的值,一個數字。例如:值為6我的目標是獲取對象,使它們的分數(自己添加)最接近值(這里:6)我的第一步是檢查對象分數是否等于該值。如果不是這樣,我不知道如何實現這一點。使用上面的數組,對于6 ,我需要選擇第二個和第三個,因為它是添加分數等于6 (4 + 2)的唯一組合但是,假設第三個對象的分數是 3,我需要選擇 3 個對象才能獲得6。有時我無法獲得價值,所以我只需要成為最接近的人。我不想讓你創建一個算法,但我需要知道我應該遵循什么路徑才能有效地實現這一點,因為我完全不知道如何實現這一點。
1 回答

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
使用遞歸。
基本上從檢查第一個分數的函數調用開始。如果它大于或等于最終分數,則返回該值。如果它小于分數,則再次調用該函數,并將新分數作為參數傳遞。如果下一個分數加上前一個分數大于或等于該分數,則返回該值。如果不是,則繼續進行,直到分數大于或等于該值。
現在,您還必須檢查哪個最終得分最接近,不一定哪個更大(例如,您可以得到 10 作為較大的值,而較小的值是 5,這更接近,所以在這種情況下,您需要選擇 5)。
所以要解決這個問題,你需要做同樣的事情,再次,相反。從對第一個分數值的函數調用(不同的函數)開始。如果等于或小于最終分值,則返回。如果它大于最終分數,則繼續,并再次調用相同的函數,將之前的分數作為參數。如果新分數加上剛剛檢查的上一個分數小于或等于最終值,則返回它。如果它更大,則繼續前進,直到到達終點。如果您已經到達終點并且所有添加的值仍然更大,那么只需返回最后一個值。
現在您總共有 2 個返回值,來自這兩個不同的函數。現在您只需將每個值與最終得分(即絕對值)之間的距離進行比較。假設你的分數是6,一個結果是8,另一個是4。因此,取一個變量列表distHigher
并將其設置為8 - 6
,然后創建另一個變量 ,distLower
并將其設置為6 - 4
,然后確定哪個數字更小,這就是您的答案。
添加回答
舉報
0/150
提交
取消