第二大数字ArrayList

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

所以到目前为止我得到了这个代码:

int secondLargest = list.get(0);
int largest = list.get(0);
for (int i = 0; i < list.size(); i++)
{
    if(list.get(i) > largest)
    {
        secondLargest = largest;
        largest = list.get(i);

        if(list.get(i) > secondLargest && list.get(i) != largest)
        {
            secondLargest = list.get(i);
        }
    }
}

System.out.print("Second biggest number ");
return secondLargest;       

问题是当我使用这段代码时 (名单是:)

list2.add(1);
list2.add(2);
list2.add(10);
list2.add(9);
list2.add(8);
list2.add(7);

对第二大数字的“搜索”在 2 处停止,因为 10 是最大的数字。我该如何解决这个问题?

java algorithm arraylist
8个回答
4
投票

使用

Arrays.sort(array);
并获取第二个元素。


2
投票

将第二个

if condition
放在第一个 if 条件之外。

因为

second largest
largest
小,所以你永远不会在检查最大值的
if
块中找到它。

int secondLargest = (int) list.get(0);
int largest = list.get(0);
for (int i = 1; i < list.size(); i++) {
  if(list.get(i) > largest) {
    secondLargest = largest;
    largest = list.get(i);
  }
  if(list.get(i) > secondLargest && list.get(i) != largest) {
    secondLargest = list.get(i);
  }
}
System.out.print("Second biggest number ");
return secondLargest;

1
投票

您可以首先使用 Collections.max() 函数找到 ArrayList 中的最大数量,一旦获得最大元素,找到该元素的索引并将其从数组中删除。再次使用 Collections.max() 查找数组中的第二大数字。代码如下

ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
al.add(3);
al.add(4);
System.out.println(al);

int j = Collections.max(al);

System.out.println("Max in the array is " + j);
al.remove(al.indexOf(j));
int max2 = Collections.max(al);
System.out.println(max2);

如果需要更多详细信息,请告诉我。


0
投票

使用两个for循环。第一个应该找到最大的数字,并存储其索引位置。第二个应该找到与先前找到的数字不在同一索引位置的最大数字。 (这将确保您不会错过第二大数字与最大数字相同的情况。)

如果您认为合适,请使用

Arrays.sort(array);
并按照 ɐuıɥɔɐɯ 的建议获取第二个元素。


0
投票
import java.util.Arrays;
import java.util.List;

public class second_highest_array {

    public static void main(String[] args) {
        //List<Integer> numlist = Arrays.asList(9,8,7,6,5,4,3,2,1,0);
        //List<Integer> numlist = Arrays.asList(0,1,2,3,4,5,6,7,8);
        //List<Integer> numlist = Arrays.asList(8,7,4,1,2,3,4,1,9,0,11,9,8);
        List<Integer> numlist = Arrays.asList(9,-8,5,4,1,7,3,2,6);
        int highestnum = numlist.get(0);
        int secondhighest = numlist.get(0);
        for(int numarr : numlist) {
            if(highestnum < numarr ) {
                secondhighest = highestnum ;
                highestnum = numarr;
            }else if(secondhighest < numarr && highestnum != numarr) {
                secondhighest = numarr;
            }else if(secondhighest == highestnum) {
                secondhighest = numarr;
            }
        }
        System.out.println("highest : "+highestnum +" :: Second Highest : "+secondhighest);
    }
}

0
投票

无需排序和线性解:

    public int compute3(List<Integer> list) {
        int max = 0, secondMax = Integer.MIN_VALUE, pre = 0;
        for(int i=0; i<list.size(); i++) {
            pre = max;
            if(list.get(i)>max) {
                max = list.get(i);
            }
            if(list.get(i)<max && list.get(i)>secondMax ) {
                secondMax = list.get(i);
            } else if(pre>secondMax && pre<max){
                secondMax = pre;
            }
        }
        return secondMax;
    }

-1
投票

在循环的第一个

if statement
中,检查
second largest
而不是
largest
。下面的内容将带您前进

    int secondLargest = list.get(0);
    int largest = list.get(0);
    for (int i = 0; i < list.size(); i++)
    {
        if(list.get(i) > secondLargest)
        {
            if(list.get(i) > largest ) {
                secondLargest = largest;
                largest = list.get(i);
            } else {
                secondLargest = list.get(i);
            }

        }
    }

-1
投票
    HashSet integers = new HashSet<>(arrayList);
    ArrayList arrayList1 = new ArrayList(integers);
    return (int) arrayList1.get(arrayList1.size()-2);
© www.soinside.com 2019 - 2024. All rights reserved.