找最小数(C++ )--- 刷题记录
题库目录
2023华为OD备考【转载】
题目描述
给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果,需要使得NUM2的值最小。
输入描述
1.输入的第一行为一个
,字符串由0-9字符组成,记录正整数NUM1,NUM1长度小于32。
2.输入的第二行为需要移除的数字的个数,小于NUM1长度。
输出描述
输出一个数字字符串,记录最小值NUM2。
用例
输出 | 131 |
说明 | 无 |
C++
#include <iostream> #include <vector> #include <string> using namespace std; int main() { string num1; int removeCount; cin >> num1; cin >> removeCount; vector<int> arr(num1.size()); for (int i = 0; i < num1.size(); i++) { arr[i] = num1[i] - '0'; } if (arr.size() == removeCount) { cout << "0" << endl; return 0; } int remainCount = arr.size() - removeCount; vector<int> stack; for (int i = 0; i < arr.size(); i++) { while (!stack.empty() && removeCount > 0 && stack.back() > arr[i]) { stack.pop_back(); removeCount--; } stack.push_back(arr[i]); } while (stack.size() > remainCount) { stack.pop_back(); } while (stack[0] == 0 && stack.size() != 1) { stack.erase(stack.begin()); } for (auto it : stack) { cout << it; } cout << endl; return 0; }