找最小数(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;
}


全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:46
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务