华为oj【整数排序】
2015-09-17 13:20
211 查看
题目
描述:实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。
题目类别: 排序
难度: 高级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔, 输入字符串的总长度小于等于100个字节。
输出:
排序后的值,各个整数之间以空格分隔。
样例输入:
1,4,3,110,2,90,7
样例输出:
1 4 7 90 110
代码
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; vector<int> Sort(string str){ int size = str.size(); vector<int> vec; if(size == 0){ return vec; }//if int num = 0; // 不用考虑非法输入 for(int i = 0;i <= size;++i){ if(i == size || str[i] == ','){ vec.push_back(num); num = 0; }//if else if(str[i] >= '0' && str[i] <= '9'){ num = num * 10 + str[i] - '0'; }//else }//for // 排序 sort(vec.begin(),vec.end()); int count = vec.size(); int start = 0; for(int i = 1;i <= count;++i){ if(i == count || vec[i] != vec[i-1]+1){ // -1标记 for(int j = start+1;j <= i-2;++j){ vec[j] = -1; }//for start = i; }//if }//for return vec; } int main(){ string str; vector<int> vec; int size; //freopen("C:\\Users\\Administrator\\Desktop\\c++.txt","r",stdin); while(cin>>str){ vec = Sort(str); size = vec.size(); for(int i = 0;i < size;++i){ if(vec[i] == -1){ continue; }//if else{ cout<<" "<<vec[i]; }//else }//for cout<<endl; }//while return 0; }
注意事项:
1.关于标记删除的理解:首先找到第一个不相邻的i的位置(此前若有数就是相邻的),以不相邻的位置i为连续数的结尾进行循环,凡是连续输>=3个的就置中间的数为-1;否则
不设置-1标记,直接输出即cout<<" "<<vec[i];
2.-1标记只标记连续数的中间部分(个数>3),以及逗号,这样循环输出结果的时候遇到-1就contibe;
3.原代码里有个if(i == 0) cout<<vec[i];着实不知道有什么用,索性删掉,欢迎指正。
转自http://blog.csdn.net/sunnyyoona/article/details/46678219
相关文章推荐
- Codeforces Round #320 (Div. 2) C - A Problem about Polyline
- Codeforces Round #320 (Div. 2) C - A Problem about Polyline
- 二叉树的深度优先,广度优先,以及层次遍历算法
- leetcode笔记:Linked List Cycle
- 分享10条PHP性能优化的小技巧,帮助你更好的用PHP开发:
- java关键字说明
- M—V—C模式
- oracle11g登录的问题
- iOS激情详解之URL同步,异步连接
- 用ListView实现GridView
- sauvola算法实现
- java execute、executeQuery和executeUpdate之间的区别
- ASP.NET动态网站制作(1)--html
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D "Or" Game 枚举+前缀后缀
- L7 linux shell编程练习
- java中的抽象类和接口详解
- 后台任务的抉择
- Week3---9月22日 图像与多媒体
- UVa 11584:Partitioning by Palindromes(DP)
- 不均匀光照文本图像的二值化