您的位置:首页 > 其它

华为上机试题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

代码

[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;
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: