算法题求解

一个字符串由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
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
``` 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
最小数字不是124605吗?
点赞 回复 分享
发布于 2018-09-24 19:12

相关推荐

03-01 21:45
中北大学 Python
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈
开工第一帖
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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