亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

找到最小的 - Codewars 挑戰 - Javascript

找到最小的 - Codewars 挑戰 - Javascript

LEATH 2021-07-02 14:00:30
試圖解決這個Codewars 挑戰。您有一個由數字組成的正數 n。您最多可以執行一個操作:選擇數字中某個數字的索引,在該索引處刪除該數字并將其插入到另一個或數字中的同一位置,以便找到您可以獲得的最小數字。任務:根據語言返回數組或元組或字符串(請參閱“示例測試”):1)你得到的最小數字2)你取的數字d的索引i,i越小越好3) 插入這個數字 d 以獲得最小數字的索引 j(盡可能?。?。例子:smallest(261235) --> [126235, 2, 0] or (126235, 2, 0) or "126235, 2, 0"其他例子:209917, [29917, 0, 1]285365, [238565, 3, 1]269045, [26945, 3, 0]296837, [239687, 4, 1]因此,為了獲得盡可能小的數字,我們需要從數字中刪除最小的數字并將其放在數字的前面,對嗎?function smallest (n) {  //turn n into an array  let array = String(n).split("").map(Number);    let smallest = Math.min(...array);    //find index of smallest in original array  let index = array.indexOf(smallest);    //remove smallest from original array, move it to front  array.splice(index, 1);  array.unshift(smallest);  let newNumber = Number(array.join(""));  //return array of new number, index of where the smallest was,   //and index of where the smallest is now  return ([newNumber, index, 0]);}console.log(smallest(239687));我的答案是返回正確的數字,但是,大約有一半的時間,它沒有返回正確的 indexi和 index j。
查看完整描述

3 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

將最小的元素放在前面(我們稱之為“貪婪”解決方案)不是最優的??紤]一下 where 的情況n = 296837,就像上一個測試用例一樣。您的代碼返回,[296837, 0, 0]因為它發現它2是最小的數字并將其移到前面(本質上什么都不做)。正如您的示例所示,有一種更好的方法:[239687, 4, 1],即移動3到數組中的第一個索引。

您需要重新制定策略以不貪婪地找到全局最優解。

如果您仍然卡住,您可以嘗試以下操作:

數字不能包含那么多數字——為什么不嘗試所有可能的交換?


查看完整回答
反對 回復 2021-07-15
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

找到第一個未排序元素的方法不能正確解決所有情況,例如如果數字是 300200,第一個未排序的數字是 3,如果你在那個地方放一個 0,取決于你移動的 0 你得到了什么:

(0)30020 (0)30020 (0)30200 (0)30200

所有的答案都是錯誤的,因為你要做的就是把 3 放在數字的末尾才能得到

(000)2003


查看完整回答
反對 回復 2021-07-15
  • 3 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號