当前位置: 首页 > 面试题库 >

有关在数组中查找最小值和最大值的Integer.MAX_VALUE和Integer.MIN_VALUE的说明

乐正晟
2023-03-14
问题内容

我似乎不知道如何Integer.MAX_VALUEInteger.MIN_VALUE帮助找到在一个数组的最小值和最大值。

我了解查找最小值和最大值时此方法(下面的伪代码)如何工作:

max = A[0], min = A[0]
for each i in A
  if A[i] > max then max = A[i]
  if A[i] < min then min = A[i]

但是对于这种方法,我不了解Integer.MAX_VALUEand 的目的Integer.MIN_VALUE

import java.util.Scanner;

class MyClass {

    public static void main(String[] args) {

        int[] numbers; // declaring the data type of numbers
        numbers = new int[3]; //assigning the number of values numbers will contain
        int smallest = Integer.MAX_VALUE, largest = Integer.MIN_VALUE;

        Scanner input = new Scanner(System.in);

        System.out.println("Please enter 3 numbers");

        for(int counter = 0; counter<numbers.length;counter++) {
            numbers[counter] = input.nextInt();
        }

        for(int i = 0; i<numbers.length; i++) {
            if(numbers[i]<smallest)
                smallest = numbers[i];
            else if(numbers[i]>largest)
                largest = numbers[i];
        }

        System.out.println("Largest is "+largest);
        System.out.println("Smallest is "+smallest);
    }

}
  • System.out.println(Integer.MAX_VALUE)给出2147483647
  • System.out.println(Integer.MIN_VALUE)给出-2147483648

那么Integer.MIN_VALUE和Integer.MIN_VALUE在比较中起什么作用?


问题答案:

但是对于这种方法,我不了解Integer.MAX_VALUE和Integer.MIN_VALUE的目的。

通过与起步,smallest设定为Integer.MAX_VALUElargest设置为Integer.MIN_VALUE,他们没有后来担心在特殊的情况smallestlargest没有价值呢。如果我要查看的数据10的第一个值为a,那么numbers[i]<smallest它将为true(因为10<
Integer.MAX_VALUE),我们将更新smallest10。同样,numbers[i]>largest将是true因为10>
Integer.MIN_VALUE,我们将更新largest。等等。

当然,这样做时,必须确保要查看的数据中至少有一个值。否则,您最终会在smallest和中获得伪数字largest

请注意Onome Sotu在评论中指出观点:

…如果数组中的第一项大于其余项,则由于else-if语句,最大项将始终为Integer.MIN_VALUE。

这是真的 这是一个演示问题的简单示例(实时复制):

public class Example
{
    public static void main(String[] args) throws Exception {
        int[] values = {5, 1, 2};
        int smallest = Integer.MAX_VALUE;
        int largest  = Integer.MIN_VALUE;
        for (int value : values) {
            if (value < smallest) {
                smallest = value;
            } else if (value > largest) {
                largest = value;
            }
        }
        System.out.println(smallest + ", " + largest); // 1, 2 -- WRONG
    }
}

要解决此问题,请执行以下任一操作:

  1. 不要使用else,或

  2. 从第一个元素开始smallestlargest等于第一个元素,然后循环其余元素,并保持else if

这是第二个示例(实时复制):

public class Example
{
    public static void main(String[] args) throws Exception {
        int[] values = {5, 1, 2};
        int smallest = values[0];
        int largest  = values[0];
        for (int n = 1; n < values.length; ++n) {
            int value = values[n];
            if (value < smallest) {
                smallest = value;
            } else if (value > largest) {
                largest = value;
            }
        }
        System.out.println(smallest + ", " + largest); // 1, 5
    }
}


 类似资料:
  • 主要内容:普通算法,分治算法程序中,我们经常使用数组(列表)存储给定的线性序列(例如 {1,2,3,4}),那么如何查找数组(序列)中的最大值或者最小值呢? 查找数组(序列)中最大值或最小值的算法有很多,接下来我们以 {3,7,2,1} 序列为例讲解两种查找最值的算法,一种是普通算法,另一种是借助 分治算法解决。 普通算法 普通算法的解决思路是:创建两个变量 max 和 min 分别记录数组中的最大值和最小值,它们的初始值都

  • 问题内容: 我的代码没有给出错误,但是没有显示最小值和最大值。代码是: 我是否需要system.out.println()来显示它,否则返回应该起作用吗? 问题答案: 您正在调用方法,但不使用返回的值。

  • 这是一个非常基本的算法(不能再简单了),但我被难住了。我们有一个元素数组,我们必须确定最小值和最大值。 通常的方法是遍历数组,找出最小值和最大值,即2n比较。 稍微有效的方法是首先对数组的连续元素进行比较,以确定任意两个元素的最大值和最小值(N/2比较)。我们现在有n/2 min和n/2 max元素。现在我们可以在n/2+n/2+n/2(前一步)=3/2*n或1.5n中得到最终的max和min 那

  • 问题内容: 我正在尝试创建两种方法,一种找到对象数组中的最小值,另一种找到对象数组中第二个最小值。 我已经这样写了两个 我已经找到了如何找到最小的值,我只需要找到第二个最小的值,我不确定怎么做。 有任何想法吗?谢谢! 问题答案: 像这样的东西:

  • 问题内容: 我很难找出例如如何从列表中查找分钟 如何通过定义()函数来查找此列表的最小值和最大值 我不想使用内置功能 问题答案: 如果要手动查找最小值作为函数: Python 3.4引入了该软件包,该软件包提供了其他统计信息:

  • 问题内容: 我想输出二维数组的最大值和最小值。Max可以很好地工作,但是即使在数组中没有零的情况下min也总是输出零。在本例中,我设置为99以防止较小的机会在数组中获得零。继承人完整代码: 问题答案: 由于您在中选择随机值的方式,不会存在小于零的值- 但也无法保证任何值都将恰好为零。但是,您将初始化为零,因为这是数组元素的默认值;没有什么比这更小了,所以答案总是零。 您应该在标记为“查找最小值”的