在使用Java查找数组中的第二个最大值?

时间:2019-02-16 08:04:35

标签: java

我的问题是我需要从数组中找到第二个最大值,但是我得到的值等于第一个值。请帮助

int[] nums = { 50, 6, 60, 70, 80, 90, 9, 150, 2, 35 };
int max = 0;
int secmax = 0;

for (int x = 0; x < nums.length; x++) {
    if (nums[x] > max)
        max = nums[x];
    if (nums[x] > secmax && secmax != max)
        secmax = nums[x];
}

System.out.println("1st H value: " + max);
System.out.println("2nd H Value: " + secmax);

7 个答案:

答案 0 :(得分:3)

您的错误是循环中的条件 使用此代码:

public class Main{
    public static void main(String[] args){
        int[] nums = { 6, 9, 11, 1, 10 };

        int max = nums[0];
        int secmax = nums[0];

        for(int x=1; x<nums.length; x++) {
            if(nums[x]>max ) {
                secmax = max;
                max=nums[x];
            }else if(nums[x]>secmax){
                secmax=nums[x];
            }
         }
        System.out.println("1st H value: " + max);
        System.out.println("2nd H Value: " + secmax);
    }
}

答案 1 :(得分:1)

您应在if.. else if循环中使用for结构:

for (int item : nums) {
    if (item > max) {
        secmax = max;
        max = item;
    } else if (item > secmax) {
        secmax = item;
    }
}

此算法的运行时间为O(n)。如果对数组进行排序,还有一个非常简洁的解决方案:

Arrays.sort(nums);     // Dual-Pivot Quicksort O(nlogn)
System.out.println(nums[nums.length - 1]);    // largest item
System.out.println(nums[nums.length - 2]);    // second largest item
...

您可以获得任何n个最大的项目,但是在这种情况下,运行时间将为O(nlogn)

答案 2 :(得分:0)

步骤1:

迭代给定的array

第2步(如果条件为arr[i] > largest,则为第一个):

如果当前数组值大于最大值,则

将最大值移至secondLargest并进行

当前值最大

第3步(如果条件为arr[i] > secondLargest,则为秒)

如果当前值小于最大且大于秒最大,则 当前值变为secondLargest

public class SecondLargest {

        public static void main(String[] args) {

            int arr[] = {50,06,60,70,80,90,9,150,2,35};
            int largest = arr[0];
            int secondLargest = arr[0];

            System.out.println("The given array is:" );
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"\t");
            }
            for (int i = 0; i < arr.length; i++) {

                if (arr[i] > largest) {
                    secondLargest = largest;
                    largest = arr[i];

                } else if (arr[i] > secondLargest) {
                    secondLargest = arr[i];

                }
            }

            System.out.println("\nSecond largest number is:" + secondLargest);

        }
    }

输出:

The given array is:
50  6   60  70  80  90  9   150 2   35  
Second largest number is:90

答案 3 :(得分:0)

int max=nums[0],secMax=nums[0]      
for (int x = 0; x < nums.length; x++) {
    if (nums[x] > max) {
        secMax=max;
        max = nums[x];
    }
}

secMax将排第二位

答案 4 :(得分:0)

  1. 使用数组的2个第一个值初始化max和scmax(second max)
  2. 然后,我将其余部分与max和scmax进行比较。每次比较时我都会调整。
int arr[] = {-50,10,80,78,67,86,34,276,8};
        int max, scmax;
        if(arr[0]>=arr[1]){
            max = arr[0]; scmax=arr[1];}
        else{max = arr[1]; scmax=arr[0];}

        for (int i = 2; i < arr.length; i++) {
            if (max <= arr[i]) {
                scmax = max;
                max = arr[i];
            } else if(scmax<=arr[i]){ scmax = arr[i];}
        }
            System.out.println("max"+max);
         System.out.println("scmax"+scmax);



答案 5 :(得分:0)

public class Secondlargest {
public static void main(String[] args) {
    int arr[]= {5,3,6,8,9,11,5,74};
    List <Integer> array = new ArrayList<Integer> ();

    for(int i=0;i<arr.length;i++){
        if (array.isEmpty()){
            array.add(arr[i]);
        }
        else if(array.contains(arr[i])) {
        }
        else{
            array.add(arr[i]);
        }
    }

    Collections.sort(array);
    System.out.println("Second Largest "+ array.get(array.size()-2));
}

}

答案 6 :(得分:0)

这可能是最简单的

public static void main(String[] args) {
    int[] array = { 1, 2, 3, -1, -2, 4 };
    Arrays.sort(array);
    System.out.println(array[array.length-2]);
    
}