给定一个奇数长度的数组,查看数组中的第一个,最后一个和中间值,并返回一个包含这三个值的数组

时间:2015-08-03 03:31:34

标签: java arrays

因此对于任何给定的奇数长度数组,我需要查看第一个,中间和最后一个值,并返回一个只有软管3值但按升序排列的数组。这就是我所拥有的,但它是只使用3个元素的数组,它不适用于其他奇数长度数组:

public int[] maxTriple(int[] nums) {

  int toSwap, indexOfSmallest = 0;
    int i, j, smallest;

    for( i = 0; i < nums.length; i ++ )
    {               

        smallest = Integer.MAX_VALUE;

        for( j = i; j < nums.length; j ++ )
        {
            if( nums[ j ] < smallest )
            {
                smallest = nums[ j ];
                indexOfSmallest = j;
            }                   
        }

        toSwap = nums[ i ];
        nums[ i ] = smallest;
        nums[ indexOfSmallest ] = toSwap;
    }

    return nums;
}

5 个答案:

答案 0 :(得分:0)

您正在获取已排序的数组,因此如果您只需要第一个,中间值和最后一个值,则可以像这样尝试:

public int[] maxTriple(int[] nums) {

      int toSwap, indexOfSmallest = 0;
        int i, j, smallest;

        for( i = 0; i < nums.length; i ++ )
        {               

            smallest = Integer.MAX_VALUE;

            for( j = i; j < nums.length; j ++ )
            {
                if( nums[ j ] < smallest )
                {
                    smallest = nums[ j ];
                    indexOfSmallest = j;
                }                   
            }

            toSwap = nums[ i ];
            nums[ i ] = smallest;
            nums[ indexOfSmallest ] = toSwap;
        }

        nums=new int[]{nums[0],nums[(nums.length/2)],nums[nums.length-1]};
        return nums;
    }

答案 1 :(得分:0)

你太难以考虑这个问题。如果数组的长度小于3或甚至,则返回null。

否则,获取第一个元素,最后一个元素和中间元素,并将它们存储在一个新数组中。使用Arrays.sort()对数组进行排序并返回新数组。

public static void main(String[] args) throws Exception {
    System.out.println(Arrays.toString(maxTriple(new int[] {1, 4, 2, 4})));
    System.out.println(Arrays.toString(maxTriple(new int[] {1, 4, 2, 4, 5})));
    System.out.println(Arrays.toString(maxTriple(new int[] {75, 99, 4, 999, 4, 65, 23})));
}

public static int[] maxTriple(int[] nums) {
    if (nums.length < 3 || nums.length % 2 == 0) {
        return null;
    }

    int[] result = new int[3];
    result[0] = nums[0]; // First
    result[1] = nums[nums.length - 1]; // Last
    result[2] = nums[nums.length / 2]; // Middle
    Arrays.sort(result);

    return result;
}

结果:

null
[1, 2, 5]
[23, 75, 999]

答案 2 :(得分:0)

我对三元运算符使用了另一种方法。我希望它会有用...

public int maxTriple(int[] nums) {
    return (nums[0] > nums[nums.length/2]) ? (nums[0] > nums[nums.length-1] ? 
            nums[0] : nums[nums.length-1]) : (nums[nums.length/2] > nums[nums.length-1] 
                    ? nums[nums.length/2] : nums[nums.length-1]);
}

答案 3 :(得分:0)

此代码可以正常工作:

public int[] maxTriple(int[] nums) {
    int[] myArray = new int[3];
    int length = nums.length;
    int middle = nums[(length + 1) / 2 - 1];
    int last = nums[length - 1];
    int first = nums[0];

    myArray[0] = nums[0];
    myArray[1] = nums[middle];
    myArray[2] = nums[last];
    return myArray;
}

答案 4 :(得分:-2)

你要做的是选择排序

以下是代码: -

int* maxTriple(int nums[], int size)
 {

    for(int i = 0; i < size-1; i++ )
    {               

        for(int j = i; j < size; j++ )
        {
            if( nums[j] < nums[i] )
            {

               int toSwap = nums[ i ];
               nums[ i ] = nums[j];
               nums[j] = toSwap;
            }                   
        }
    }
    return nums;
}