首页 文章

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

提问于
浏览
0

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];
 }
}

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

3 回答

  • 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();
    
  • 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];
            }
        }
    
  • 0

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

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

相关问题