java - 交替任命

标签 java

给定数组中的数字序列,返回交替排列的这些数字,即最小的数字,其次是最大的数字,其次是第二低的数字,然后是第二高的数字,依此类推。

输入:1 2 3 4 5 输出:1 5 2 4 3

输入:10 5 7 9 2 2 输出:2 10 2 9 5 7

我尝试了这样的事情,但不适合我,请帮助我。 我需要两个输出到同一个函数或方法中。

公开课测试{ int[] inputArray = { 1, 2, 3, 4, 5 };

void mergeSort(int[] array) {
    int[] helper = new int[array.length];
    mergesort(array, helper, 0, array.length - 1);
    for (int i = 0; i < array.length; i++) {
        System.out.println(array[i]);
    }
}

private void mergesort(int[] array, int[] helper, int low, int high) {
    if (low < high) {
        int middle = (low + high) / 2;
        mergesort(array, helper, low, middle);
        mergesort(array, helper, middle + 1, high);
        merge(array, helper, low, middle, high);

    }

}

private void merge(int[] array, int[] helper, int low, int middle, int high) {
    for (int i = low; i <= high; i++) {
        helper[i] = array[i];
    }
    int helperLeft = low;
    int counter = 0;
    int helperRight = middle + 1;
    int current = low;
    while (helperLeft <= middle && helperRight <= high) {
        if (counter % 2 == 0) {
            if (helper[helperLeft] <= helper[helperRight]) {
                array[current] = helper[helperLeft];
                helperLeft++;
            } else {
                array[current] = helper[helperRight];
                helperRight++;
            }

        } else {
            if (helper[helperLeft] >= helper[helperRight]) {
                array[current] = helper[helperLeft];
                helperLeft++;
            } else {
                array[current] = helper[helperRight];
                helperRight++;
            }

        }
        counter++;
        current++;
    }
    int remaining = middle - helperLeft;
    for (int i = 0; i <= remaining; i++) {
        array[current + i] = helper[helperLeft + i];
    }

}

public static void main(String[] args) {

    Solution i = new Solution();
    i.mergeSort(i.inputArray);

}

}

输出:1,4,3,5,2

最佳答案

我首先会像平常一样对数组进行排序,然后使用它以您想要的方式进行交替。

int[] toReturn = new int[inputArray.length];

Arrays.sort(inputArray);

for (int i = 0; i < inputArray.length; i+=2) {
    toReturn[i] = inputArray[i/2];
}
for (int i = 1; i < inputArray.length; i+=2) {
    toReturn[i] = inputArray[inputArray.length - i/2 - 1];
}

关于java - 交替任命,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38165233/

相关文章:

java - 用于自动化 UI 测试的 Maven 结构

Java修复代码中的正则表达式

java - Kadane 算法的 O(N) 中的最小总和子数组

java - 如何用.net方式模仿皮肤java swing?

java - 编写代码以仅使用一次 isSubstring 调用来检查 s2 是否是 s1 的旋转

java - AKKA - Spring MVC 和服务 - 超时异常

java - 填充并保持 JTable 更新

java - okhttp 中的代理问题

java - 将我的文件转换为 blob,然后插入数据库

java - 如何用单个正则表达式模式替换过多的 SQL 通配符?