查找数组中的第一个,最后一个和中间值。返回最大的一个

时间:2017-04-15 02:44:37

标签: java

Java新手就在这里。我正在练习数组问题,我对这个问题有疑问:给定奇数长度的整数数组,查看数组中的第一个,最后一个和中间值并返回最大值。数组长度至少为1.

我知道如何在数组中找到第一个,最后一个和中间值。然后我尝试使用if语句来解决这个问题。

我的代码:

public int maxTriple(int[] nums) {
    if(nums[0]>nums[(nums.length+1)/2-1]&&nums[0]>nums[nums.length-1]){
       return nums[0];
   }else if(nums[(nums.length+1)/2-1>]>nums[0]&&nums[(nums.length+1)/2-1>]>
            nums[nums.length-1]){
       return nums[nums.length-1];
   }else{
       return nums[nums.length-1];
 }
}

但是这段代码根本无法解决我如何修复我的代码?

4 个答案:

答案 0 :(得分:0)

在第二个 - 如果你有额外的“>” (也许是拼写错误)

如果第二个条件为真,则需要返回nums[(nums.length+1)/2-1

所以你需要以这种方式解决它:

public int maxTriple(int[] nums) {
        if(nums[0]>nums[(nums.length+1)/2-1]&&nums[0]>nums[nums.length-1]){
            return nums[0];
        }else if(nums[(nums.length+1)/2-1]>nums[0]&&nums[(nums.length+1)/2-1]>nums[nums.length-1]){
            return nums[(nums.length+1)/2-1];
        }else{
            return nums[nums.length-1];
        }
    }

答案 1 :(得分:0)

由于您只对值感兴趣,而不是索引,因此可以使用

public int maxTriple(int[] nums) {
   int max = Math.max(nums[0], nums[nums.length - 1]);
   return Math.max(max, nums[nums.length / 2]);
}

答案 2 :(得分:0)

首先,为了使代码更易读/可理解,您应该将3个感兴趣的值分配给局部变量,并且应该在运算符周围添加一些空格。

此外,由于你知道长度将是奇数,length / 2足以找到中间值:

int first  = nums[0];
int middle = nums[nums.length / 2];
int last   = nums[nums.length - 1];

if块以return语句结尾时,else变得多余,尽管这是一种风格问题。在这种情况下,它没什么区别,但在更复杂的代码中,它可以对代码复杂性产生很大的影响。

当然,你的主要问题是PM 77-1 pointed out

  

您是否知道返回nums[nums.length-1] 两次

中间的return语句返回了错误的值:

if (first > middle && first > last) {
    return first;
}
if (middle > first && middle > last) {
    return middle;
}
return last;

您可以使用三元条件运算符在单个语句中编写它:

return (first > middle && first > last ? first :
        middle > first && middle > last ? middle : last);

您可以使用Math.max()方法来简化它:

return Math.max(Math.max(first, middle), last);

或者你可以使用IntStream.max(),如果你有很多值,那就更好了:

return IntStream.of(first, middle, last).max().getAsInt();

答案 3 :(得分:0)

可读性多于多个条件:

public int maxTriple(int[] nums) {
    return Math.max(Math.max(nums[0], nums[nums.length - 1]), nums[nums.length / 2]);
}