这个题不知道ac没有,因为是随便看到的一个题,没办法测,如果有错误请帮我指出来~
看到很多复杂度很高的暴力破解方法,有三层循环的那种,我这个复杂度应该会低一点。

/*思路,先将结果初始化最后m-n个字符,放在res中
从res的第一位开始,在它前面寻找最大的字符,并且替换,将最大位的下标记为max
下一次从max开始寻找。由于max已经被用过,防止被重复使用,就在上一轮找到max之后将其置0
*/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
string m;
int n;
cin >> m >> n;
int len = m.length();
vector<char> vec(len);
for (int i = 0; i < m.length(); i++)
vec[i] = m[i];
int new_len = m.length() - n;
vector<char> res(new_len);
for (int i = len - new_len, j = 0; j < new_len; i++, j++)
res[j] = vec[i];
//从res的最高位开始,依次选取res前面的序列中最大的值,并赋给

这篇博客探讨了一道编程题,题目要求在整数m中删除n个数位,保持顺序不变,求删除后的最大或最小数。作者指出常见复杂度较高的暴力解法,并提出可能更优的解决方案。例子中展示了如何找到删除数位后的最小数,初始化并从后往前寻找最小值,确保每一轮的最小值在其后产生。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



