刪除K個數字,使剩下的數字串最大

2021-06-09 21:38:21 字數 889 閱讀 2521

題目:

乙個n位的數,去掉其中的k位,問怎樣去掉使得留下來的那個(n-k)位的數最大?

分析:可以直接用貪心來求解,每次尋找從頭開始的連續遞減序列,刪除遞減序列的最後乙個元素,重複k次,最後剩下的數字串組成的數字最大。

比如:「13787323」

第一次,遞減序列只有1,刪除1,得到3787323

第二次,遞減序列只有3,刪除3,得到787323

第三次,遞減序列只有7,刪除7,得到87323

第四次,遞減序列是8732,刪除2,得到8733

**如下:

#include using namespace std;

#define max 0x7fffffff

int main()

; //在這裡面加入乙個哨兵,放在最前面,不用考慮start會越界問題

int k = 4; //刪除字元的個數

int len = sizeof(a) / sizeof(a[0]);

start = 0;

end = 1;

int count = 0;

while(end <= len && count != k) }

while(end <= len) //刪除已經完成,儲存後面的字元

for(int i = 1; i < len - k; i++)

cout << a[i] << " ";

cout << endl;

return 0;

}

測試用例可以是:1,2,3,4,5,6,7,8;8,7,6,5,4,3,2,1;

總結:

典型的貪心應用,而且使用兩個指標的方式,從頭往後找,時間複雜度是o(n),空間複雜度是o(1)。

刪除k個數字使剩下數字最小(大)

如 1593121212去掉3個數,剩下1121212最小。思路如下 刪除k個,可以採用貪心演算法,每次刪除1個 那麼每次刪哪乙個呢?此時我們已經能看出 要求剩下的數字最小,從左向右掃瞄,找出連續的非嚴格遞增串,刪除最後乙個 要求剩下的數字最大,從左向右掃瞄,找出連續的非嚴格遞減串,刪除最後乙個。核...

連續最長的數字串

牛客網 題目描述 讀入乙個字串str,輸出字串str中的連續最長的數字串 輸入描述 1個測試輸入包含1個測試用例,乙個字串str,長度不超過255。輸出描述 在一行內輸出str中里連續最長的數字串。解題思路 思路 於牛客網卷積神經網路哦 從下標為0開始遍歷字串,沒有出現數字下標 1,當遇到數字時進入...

最大數字 題解 (刪除k個數字 貪心)

時間限制 1sec 記憶體限制 128mb 提交 104 解決 27 題目描述 給你乙個整數 n,使得從 n 中刪除 k 個數字之後的數字最大。輸入輸入乙個整數 n 0 n 10 100 和需要刪除數字 k 100的個數 輸出輸出刪除k個數字之後的最大整數 樣例輸入 1432219 3樣例輸出 43...