如何从整数列表中找到最大值

时间:2014-02-21 20:51:53

标签: java

int playerOne = 4;
int playerTwo = 8;
int playerThree = 2;
int playerFour = 8;

public static int max(int p1, int p2, int p3, int p4) {
    if(p1 > p2 && p1 > p3 && p1 > p4){
        return p1;
    } else if (p2 > p1 && p2 > p3 && p2 > p4) {
        return p2;
    } else if ...


}

我想知道这是一种更好的方法来重现上面的功能,重复性较低。

感谢。

5 个答案:

答案 0 :(得分:6)

public static int max(int[] integers) {
    int max = Integer.MIN_VALUE;
    for (int e : integers) max = Math.max(max, e);
    return max;
}

现在可以返回有关变量名称的信息的实现:

//Returns the array index of the maximum integer
public static int max(int[] integers) {
    int max = Integer.MIN_VALUE;
    int retVal = -1;
    if (integers == null) return retVal;  //needs to handle this case too
    for (int i = 0; i < integers.length; i++) {
        max = Math.max(max, integers[i]);
        if (integers[i] == max) retVal = i;
    }
    return retVal;
}

这些实现还具有能够处理任何大小的数组的优势,而不仅仅是4。

答案 1 :(得分:2)

使用Java 8,这将是:

private int max(int... ints) {
    if (ints.length == 0) {
        throw new IllegalArgumentException();
    }
    return Arrays.stream(ints).max().getAsInt();
}

步骤说明:

  1. 确保ints.length > 0
  2. 创建IntStream
  3. 使用max()上的IntStream获取最大价值。
  4. 获取int并将其从[{1}}返回的OptionalInt中退回。
  5. 我希望它有助于将来参考。

答案 2 :(得分:1)

public static int max(int[] integers) {
    int max = integers[0];
    for (int i = 1; i < integers.length; i++)
        max = Math.max(max, integers[i]);
    return max;
}

答案 3 :(得分:1)

如果使用包装类Integer,则可以执行以下操作:

public static int max(Integer... values){
    return Collections.max(Arrays.asList(values));
}

答案 4 :(得分:0)

只是为了它的乐趣,我给了一个递归的方式,它没有比其他选项更好,但它很有趣; - )

public static int get_max(int[] integers) {
    switch (integers.length) {
        case 0:
            throw new IllegalArgumentException();
        case 1:
            return integers[0];
        case 2:
            return Math.max(integers[0],integers[1]);
        default:
            return Math.max(integers[0], get_max(Arrays.copyOfRange(integers, 1, integers.length-1));
    }
}

afaict它应该工作,但它根本不是内存效率,因为它在每次递归时复制数组(少一个值),并为每次递归的每个函数调用占用内存。

<3