java中查找数组中第二大数字的方法

问题描述 投票:0回答:9

每次当我要得到 3 时,都会得到 0 的输出,我不确定我哪里出了问题,我可以不使用我知道的方法而只是尝试练习 java 来做到这一点

public class App {
    
    public static int second(int a[],int n) {
        int[] arr = new int [n];
        int temp;
        for(int i=0;i<n;i++) {
            for(int j=i+1;j<n;j++) {
                if(arr[i] > arr[j]) {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr[n-2];
    }

    public static void main(String[] args) {
        int[] arr = {1,3,2,5,3};
        int n = 5;
        int result = second(arr,n);
        System.out.println(result);
    }
}
java arrays sorting
9个回答
0
投票

您可以更改数组参数名称 arr 并删除声明或将值从 a 复制到 arr。

public static int second(int arr[],int n) {
    int temp;
    for(int i=0;i<n;i++) {
        for(int j=i+1;j<n;j++) {
            if(arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr[n-2];
}

你得到零的原因是因为原始 int 不能为空。因此,当您创建长度为 5 的数组时,它一开始会填充零。


0
投票

使用流来实现:

public static int second(int a[]) {
    return Arrays.stream(a)
            .sorted()
            .skip(a.length - 2)
            .findFirst()
            .getAsInt();
}

我删除了第二个参数。在选择现在的第一个元素之前,它会对您的数组进行排序并跳过您想要的元素之前的所有元素。


0
投票
public static int second(int[] arr) {
    int highest = arr[0];
    int second = 0;
    for (int i = 1; i < arr.length; i++) {
        int j = arr[i];
        if (j >= highest) {
            highest = j;
        } else if (j > second) {
            second = j;
        }
    }
    return second;
}

public static void main(String[] args) {
    int[] arr = {1, 3, 2, 5, 3};
    int result = second(arr);
    System.out.println(result);
}

0
投票

这是一种不需要排序的方法。

int[] arr = { 10, 2, 3, 19, 2, 3, 5 };
System.out.println(second(arr));

打印

10
  • largest
    设置为数组中的第一个值
  • secondLargest
    设置为尽可能最小的
  • 现在迭代数组。
  • 如果当前值大于最大值:
    • 用最大替换第二大
    • 用当前值替换最大的
  • 否则检查当前值是否大于第二大值,如果为真则赋值。
public static int second(int arr[]) {
    int largest = arr[0];
    int secondLargest = Integer.MIN_VALUE;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] > largest) {
            secondLargest = largest;
            largest = arr[i];
        } else if (arr[i] > secondLargest) {
            secondLargest = arr[i];
        }
    }
    return secondLargest;
}

0
投票
public static int second(int arr[],int n) {
    int temp;
    if(arr.length < 2) {
        return -1;
    }
    else {
    for(int i=0;i<n;i++) {
        for(int j=i+1;j<n;j++) {
            if(arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr[n-2];
}

0
投票
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int a[] = {23,14,56,77,66,67};
    int high = 0;
    int sec = 0;
    for(int i = 0 ; i <a.length; i++){
        if(high < a[i]){
            sec = high;
            high = a[i];
        }
        else if(sec < a[i]){
            sec = a[i];
        }
        
    }
    System.out.println("the first highest number is " + high);
    System.out.println("the second highest number is " + sec);
}

}


0
投票
public static int sec(){
    int arr[] = {12,3,67,4,5,65};
    int high = 0;
    int low = 0;
    for(int i = 0 ; i < arr.length ; i ++){
        
        if(high < arr[i]){
            low = high;
            high = arr[i];
        }
        else if(low < arr[i]){
            low = arr[i];           
            }
    }
    return low;
}
public static void main(String[] args) {
    // TODO Auto-generated method stub

    sch obj = new sch();
    int a = obj.sec();
    
    System.out.println(a);
}

}


0
投票

包com; 公共类 FindSecondHighestNumberInArray {

public static void main(String[] args) {
    int []arrayOfIngeger = {-23,-989,-878,-2,-5,-3,-4,-123,-345,-98,-675,-98};
    int highestNumber = arrayOfIngeger[0];
    int secHighestNumber = 0;
    for(int i = 1; i < arrayOfIngeger.length; i++  ) {
        if(highestNumber < arrayOfIngeger[i]) {             
            secHighestNumber = highestNumber; 
            highestNumber = arrayOfIngeger[i];  
        }else if(secHighestNumber < arrayOfIngeger[i] && arrayOfIngeger[i] != highestNumber) {
            secHighestNumber = arrayOfIngeger[i];
        }
    }
    System.out.println("second Highest Number in Array   :  "+secHighestNumber);
}

}


0
投票

列表列表=Arrays.asList(1,2,3,4,5);

 int secHighest=list.stream().sorted(Collections.reverseOrder()).distinct().skip(1).findFirst().get();
 System.out.println(secHighest);
© www.soinside.com 2019 - 2024. All rights reserved.