算法题求解

一个字符串由0-9数字组成,删除其中出现多次的字符,只保留一次,保证前后关系不变的情况下,使得最后组成的数字最小?
例子:1254601245
结果最小数字为:124605
全部评论
// 不知道满不满足要求 #include <iostream> #include <vector> #include <string> #include <cstring> using namespace std; int main() { string str; while (cin >> str) { vector<char> vec; for (char ch : str) { int index = -1; for (int i = 0; i < vec.size(); ++i) { if (vec[i] == ch) { index = i; break; } } if (index == -1) { vec.push_back(ch); } else if (index != vec.size() - 1 && vec[index] < vec[index + 1]) { continue; } else { while (index < vec.size() - 1) { vec[index] = vec[index + 1]; ++index; } vec[index] = ch; } } for (char ch : vec) { cout << ch; } cout << endl; } return 0; }
点赞 回复 分享
发布于 2018-09-24 19:18
最小数字不是124605吗?
点赞 回复 分享
发布于 2018-09-24 19:12
``` def find_min(arr): d={} res=[0]*len(arr) res[0]=arr[0] for i in range(1,len(arr)): if arr[i] in res[i-1]: if res[i-1].index(arr[i])==len(res[i-1])-1 or res[i-1][res[i-1].index(arr[i])+1]>res[i-1][res[i-1].index(arr[i])]: res[i]=res[i-1] else: res[i]=res[i-1][:res[i-1].index(arr[i])]+res[i-1][res[i-1].index(arr[i])+1:]+arr[i] else: res[i]=res[i-1]+arr[i] return int(res[-1]) ``` 菜鸡瞎写的。。
点赞 回复 分享
发布于 2018-09-24 23:17
def find_min(arr): res=[0]*len(arr) res[0]=arr[0] for i in range(1,len(arr)): if arr[i] in res[i-1]: if res[i-1].index(arr[i])==len(res[i-1])-1 or res[i-1][res[i-1].index(arr[i])+1]>res[i-1][res[i-1].index(arr[i])]: res[i]=res[i-1] else: res[i]=res[i-1][:res[i-1].index(arr[i])]+res[i-1][res[i-1].index(arr[i])+1:]+arr[i] else: res[i]=res[i-1]+arr[i] return int(res[-1])
点赞 回复 分享
发布于 2018-09-24 23:18

相关推荐

2024-12-25 09:09
四川师范大学 运营
点赞 评论 收藏
分享
2024-12-23 10:55
已编辑
大连理工大学 Java
牛客930504082号:华子综测不好好填会挂的,而且填的时候要偏向牛马选项
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务