Java 如何查找数组中存储的最高和最低数字?

Java 如何查找数组中存储的最高和最低数字?,java,arrays,Java,Arrays,我试图打印数组中存储的最高和最低整数。我可以打印最高的,但对于最低的,我没有得到正确的结果 考虑我下面的两个课程: class ArrayUtilityNew { public static int findMaxMin(int a[]) { int n=a.length; int n2=n-1; int minNo=0; int count=0; int maxNo=0; for(

我试图打印数组中存储的最高和最低整数。我可以打印最高的,但对于最低的,我没有得到正确的结果

考虑我下面的两个课程:

class ArrayUtilityNew
{
    public static int findMaxMin(int a[])
    {
        int n=a.length;
        int n2=n-1;
        int minNo=0;
        int count=0;
        int maxNo=0;

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(a[i]<a[j])count++;

            }
            //This gives the highest no. if the count is 0
            if(count==0)
            {
              maxNo=a[i];

            }

          //Lowest no. shall be gained here if the count is greater
          // than the no of elements in the array

           // if(count>n)
           // {
            //    minNo=a[i];
           // }

            count=0;
        }
        return maxNo;            
    }

}

class ArrayInteractionsNew
{
    public static void main(String arr[])
    {
        int one[]={3,20,1999,2,10,8,999};
        int answer=ArrayUtilityNew.findMaxMin(one);
        System.out.println("The highest no in the array is "+answer);   
    }        
}
class ArrayUtilityNew
{
公共静态int findMaxMin(int a[]
{
int n=a.长度;
int n2=n-1;
int minNo=0;
整数计数=0;
int maxNo=0;

对于(int i=0;i你的答案是n^2。要找到最小值和最大值,只需要n阶

换句话说,你只需要看起来是线性的

执行循环,查看列表一次。在执行过程中跟踪最小值和最大值。最初设置最小值=最大值和最大值=最小值。当发现小于最小值的值时,它将成为新的最小值

下面是一个伪代码示例

min = max_int
max = min_int
for (i=0; i < array.length; i++) 
    if array[i] < min 
        min = array[i]
    if array[i] > max
        max = array[i]
min=max\u int
最大值=最小值
对于(i=0;imax
最大值=数组[i]

你的方法,即使有效,也是不必要的复杂

  • 创建两个变量:
    minNo
    maxNo
  • 设置
    minNo
    =
    Integer.MAX\u值
    maxNo
    =
    Integer.MIN\u值

  • 循环遍历数组。如果元素是
    =maxNo
    ,则将其值指定给
    maxNo
    。此外(也不是相反——即,如果
    ,则不是
    ),如果元素是
    ,我认为您的解决方案太复杂了……更好、更有效的解决方案是:

    int n=a.length;
    int minNo=a[0];
    int maxNo=a[0];
    
    for(int i=1;i<n;i++)
    {
         if(a[i] > maxNo) {
             maxNo = a[i];
         } else if(a[i] < minNo) {
             minNo = a[i];
         }
    }
    
    // do whatever you want with maxNo and minNo
    
    int n=a.length;
    int minNo=a[0];
    int maxNo=a[0];
    对于(int i=1;i maxNo){
    maxNo=a[i];
    }else if(a[i]
    还有一种更有效的方法(以代码大小的方式)是使用列表或流,因为您可以用它做一行程序


    编辑:关于效率的代码和解释不那么模棱两可

    多亏了java8中的流式API,这是一个两行程序:

    int[] array = new int[] {5,7,2,9,10,24,3,23};
    
    int min = IntStream.of(array).min().getAsInt();
    int max = IntStream.of(array).max().getAsInt();
    
    或者作为更高效的三衬板:

    Arrays.parallelSort(array);
    int min = array[0];
    int max = array[array.length -1];
    

    您可以返回
    min
    max
    int[]
    。从两个元素的数组开始,在数组1上循环

    结果将是一个数组,第一个元素是最小值2。然后要测试它

    public static void main(String[] args) {
        int[] arr = { 3, 20, 1999, 2, 10, 8, 999 };
        int[] minMax = findMinMax(arr);
        System.out.printf("%s: min=%d, max=%d%n", 
                Arrays.toString(arr), minMax[0], minMax[1]);
    }
    
    我得到了(正如我所期望的)

    1此处,带有一个。
    2第二个元素为最大值。

    公共静态无效最小值(int[]arr){
    int min=arr[0];
    int max=arr[0];
    
    对于(int i=1;iWhy使用列表会更有效?数组访问速度非常快,这里不需要动态长度。您的代码不完整。返回值如何?如何通过返回int的函数返回最小值和最大值?@hexafrance,因为它是一行。但是,数组需要更多行,但速度更快@hexafraction您应该澄清您需要什么样的效率。如果是性能问题或其他问题?@Fouss只需删除“高效”和“列表”两个词,因为您不知道自己在说什么。如何使用minmax()扩展IntStream?OP只是在学习。这不是有点过头了吗?第二种解决方案效率更低。时间复杂度解决方案1:2n->o(n)。时间复杂度解决方案2:o(n*logn)[快速排序]。@netskink是的,我刚开始使用IntStream,但肯定会使用它。它确实缩短了代码。为什么findMinMax()是公共的?是否希望从其他类调用它。静态方法应使用perefix类调用。为什么不使用具有两个属性的数据对象而不是数组?@RomanC“静态方法应使用perefix类调用”如果您静态导入它,或者它位于同一类“
    main
    方法”中,则不会这样做。@AndyTurner-Huh?静态导入仅在Java 7及更高版本中可用,其他用户应使用前缀,即使它是同一类。@RomanC,实际上。与其只发布代码,请添加一些解释,说明代码的作用,这将非常有用。
    public static void main(String[] args) {
        int[] arr = { 3, 20, 1999, 2, 10, 8, 999 };
        int[] minMax = findMinMax(arr);
        System.out.printf("%s: min=%d, max=%d%n", 
                Arrays.toString(arr), minMax[0], minMax[1]);
    }
    
    [3, 20, 1999, 2, 10, 8, 999]: min=2, max=1999
    
    public static void minMax(int []arr){
         int min = arr[0];
         int max = arr[0];
         for(int i=1; i<arr.length; i++){
             min = Math.min(min,arr[i]);
             max = Math.max(max,arr[i]);
         }
    //do whatever you want with the max and min
    }