因此对于任何给定的奇数长度数组,我需要查看第一个,中间和最后一个值,并返回一个只有软管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;
}
答案 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;
}