数组元素,安排和识别元素

时间:2013-09-26 06:20:48

标签: java arrays algorithm

如何找到数组中的第二大元素,这是我的代码,但我无法弄清楚问题,非常感谢帮助

import java.util.Arrays;
import java.util.Random;

public class NDlargest
{
    Random random = new Random();
    private int[] array = new int[10];
    private int largest;
    private int largest2;

    public NDlargest()
    {
        largest = 0;
        largest2 = 0;

        for (int i =0; i< array.length; i++)
        {
            array[i] = 1 + random.nextInt(100);
        }
         System.out.println(Arrays.toString(array));
    }

    public int getLargest()
    {

    for (int i = 0; i < array.length; i++)
    {
        int number = array[i];

        if (number > largest)
        { 
            largest = number;
        }
    }
    return largest;
}


   public int getSecondLargest()
   {
       for (int i = 0; i < array.length; i++)
       {
           int number2 = array[i];
           if  (largest2 < largest)
           {
               if (number2 > largest2)
               {
                   largest2 = number2;
                } 
            }
            else
           {

              break;
            }
        }
             return largest2;


}}

3 个答案:

答案 0 :(得分:3)

       int number2 = array[i];
       // here is the problem
       if  (largest2 < largest) 

请替换为以下内容。

        int number2 = array[i];
        if  (number2 < largest)

您的方法的优化版本很少。

    public int getLargest()
    {

       for (int i = 0; i < array.length; i++)
       {       

           if (array[i] > largest)
           { 
              largest = array[i];
           }
       }
       return largest;
    }


    public int getSecondLargest()
    {
       for (int i = 0; i < array.length; i++)
       {          
           if  (array[i] < largest)
           {
               if (array[i] > largest2)
               {
                   largest2 = array[i];
                } 
            }

        }
        return largest2;   
    }

答案 1 :(得分:0)

更改您的getSecondLargest()代码,如:

public int getSecondLargest() {
        Arrays.sort(array);
        largest2=array[array.length-2];
        return largest2;

}

答案 2 :(得分:0)

首先询问为什么在查找第二大数字的代码中需要中断?从本质上讲,如果不查看列表中的所有数字,您能找到第二大数字吗?

然后,要了解在列表中查找第k个元素而不进行排序的一般解决方案,请查看http://pine.cs.yale.edu/pinewiki/QuickSelect