一顿狂轰乱炸zkxzhuzhu要实现这个功能,可以首先遍历数组一次来找到最大值和最小值以及它们的索引,然后再进行两次交换.public class ArrayMinMaxSwap {    public static void main(String[] args) {        int[] nums = {5, 3, 8, 4, 2};        swapMinMax(nums);        for (int num : nums) {            System.out.print(num + " ");        }    }    public static void swapMinMax(int[] nums) {        if (nums == null || nums.length < 2) {            return;        }        int minIndex = 0;        int maxIndex = 0;        int min = nums[0];        int max = nums[0];        // 找出最小值和最大值的索引        for (int i = 1; i < nums.length; i++) {            if (nums[i] < min) {                min = nums[i];                minIndex = i;            }            if (nums[i] > max) {                max = nums[i];                maxIndex = i;            }        }        // 如果最大值或最小值已经在正确的位置,则不需要交换        if (minIndex != 0) {            // 将最小值交换到数组的第一个位置            int temp = nums[0];            nums[0] = min;            nums[minIndex] = temp;        }        if (maxIndex == nums.length - 1 || (maxIndex != 0 && maxIndex != minIndex)) {            // 如果最大值已经在最后一个位置,或者最大值和最小值不是同一个元素,则交换            int temp = nums[nums.length - 1];            nums[nums.length - 1] = max;            nums[maxIndex] = temp;        }        // 注意:如果最大值和最小值相同且都在第一个位置,则上面的代码会进行不必要的交换然后恢复原位        // 但由于总是从索引1开始寻找最大值和最小值,这种情况下的交换是无害的    }}注意:这个方法首先遍历数组找到最大值和最小值的索引以及它们的值。然后,它检查这两个值是否已经在它们的目标位置(即最小值在数组的第一个位置,最大值在数组的最后一个位置)。如果不在,就进行相应的交换。这里有一个小的优化点:如果最大值已经在最后一个位置,且它不与最小值相同(即它们不是同一个索引),那么可以避免对最大值的第二次交换。但是,为了代码的清晰性和易读性,这里还是保持了两次可能的交换。需要注意的是,如果数组只有一个元素或为空,这个方法将直接返回,因为在这种情况下没有最小值或最大值的概念,或者没有位置可以交换。
点赞 26
评论 2
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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