华为上机试题5(整数排序并删除一些元素)
2015-08-24 23:25
435 查看
题目来自于http://blog.csdn.net/column/details/huaweicode.html?&page=4,原文均是用的c++,我用的java写的。
题目描述
实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。
题目类别: 排序
难度: 高级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔, 输入字符串的总长度小于等于100个字节。
输出:
排序后的值,各个整数之间以空格分隔。
样例输入:
1,4,3,110,2,90,7
样例输出:
1 4 7 90 110
代码
题目描述
实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。
题目类别: 排序
难度: 高级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔, 输入字符串的总长度小于等于100个字节。
输出:
排序后的值,各个整数之间以空格分隔。
样例输入:
1,4,3,110,2,90,7
样例输出:
1 4 7 90 110
代码
[code]// 我的解决思路:先将该数组排序,然后查出需要删除的个数,最后把需要删除的删除掉。 public class num3 { public static void main(String[] args) { Scanner sn = new Scanner(System.in); String s = sn.nextLine(); String s1[]; s1 = s.split(","); int length = s1.length; int[] array = new int[length]; for (int i = 0; i < length; i++) { array[i] = Integer.parseInt(s1[i]); } //先进行选择排序 chooseSort1(array); int a[] = doit(array); length = a.length; for (int i = 0; i < length; i++) System.out.println(a[i]); } //找出需要删除的数字个数 private static int getNeedCleanNum(int a[]) { int length = a.length; int count = 0; for (int i = 0; i < length; i++) { boolean begin = true; boolean end = true; if (i - 1 >= 0) { if (a[i - 1] + 1 == a[i]) begin = false; } if (i + 1 < length) { if (a[i + 1] == a[i] + 1) end = false; } if (begin == false && end == false) { count++; } } return count; } public static int[] doit(int a[]) { int length = a.length; int[] b = new int[length - getNeedCleanNum(a)]; int index = 0; //将需要的元素进行复制,要删除的元素不再进行复制 for (int i = 0; i < length; i++) { boolean begin = true; boolean end = true; if (i - 1 >= 0) { if (a[i - 1] + 1 == a[i]) begin = false; } if (i + 1 < length) { if (a[i + 1] == a[i] + 1) end = false; } if (begin || end) { b[index++] = a[i]; } } return b; } /** * @ 选择排序 */ public static int[] chooseSort1(int a[]) { int length = a.length; for (int i = 0; i < length; i++) { int tem = i; for (int j = i + 1; j < length; j++) { if (a[tem] > a[j]) { tem = j; } } if (tem != i) { int t = a[tem]; a[tem] = a[i]; a[i] = t; } } return a; } }
相关文章推荐
- 推荐两个比较全的android在线源代码
- Hashtable
- 神经网络模型算法与生物神经网络的最新联系
- 猜拳游戏--最高效版本
- Linux环境下【mysql】修改mysql5.5默认编码
- Swift 语言基础算法
- Set
- [BZOJ1046][HAOI2007]上升序列
- MySQL简易建立餐厅数据库
- 面试题之:String,StringBuffer与StringBuilder的区别?
- 移除系统自带的tabBarItem
- 字符数粗的输出
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B
- VC调用DLL
- 使用不带头结点的循环链表实现队列(数据结构)
- BA-DDC与PLC的比较(转载)
- 【Leetcode】First Missing Positive
- hdu 4185 Oil Skimming 二分图匹配
- prototype原型
- Android 的上下文菜单: Context Menu,registerForContextMenu(getListView())