貪心算法----刪數問題


一、問題描述

給定n位整數a,去掉其中任意k<=n個數字后,剩下的數字按原次序排列組成一個新的正整數。
如輸入一個正整數:178543;
刪除其中4個數
得到:13

二、解決思路--貪婪算法

這里先介紹之前錯誤的思路:

找出數字中n-k個最小的數,組成新的正整數;

但是很快就有問題出現,雖然每次都找的是整數各個位置中最小的數,但是忽略掉了位置的相對關系,如以下的例子:

輸入的一個整數:178906; 6位數的整數

刪除其中4個數;

按照這個思路,即要選擇6-4=2個最小的數,即0 和1,按照數中原有的次序,得到的是10;

但是事實上,應該是06,即6

 

所以換個思路,叫“最近下降點”優先。

利用“最陡下降點”優先,即每次找到第一個元素,使其滿足大於下一個元素。正如上述的那個例子,第一個刪除的是9,因為9>0;

得到的整數是17806;第二個刪除的是8,因為8>0,得到的整數是1706,第三個刪除的是7,因為7>0,得到的整數是106;

第四個刪除的是1,因為1>0,得到的是06,為正確的答案。

 

三、程序設計

(1)同樣,給出錯誤的設計思路的程序:

(2)正確的設計思路的程序:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM