在 n 个数字的 array/list 中找到 3 个最大的数字而不进行排序

Finding the 3 largest numbers in an array/list of n numbers without the sorting

当我做作业时,当我必须在数字列表(未指定数据结构)中找到最大的 3 个数字时,我真的很困惑。我对我必须做的事情感到非常震惊。有帮助吗?

你可以保留三个变量来存储三个最大值,并遍历数组:

你需要处理三种情况:

  • 当当前元素大于最大元素时。需要相应更新第二和第三大。

  • 当当前元素大于第二大时。需要更新第三大

  • 当当前元素大于第三大时

我的code如果你还卡住了

for(int i : array)
    if(i > largest)
      //Do smt
    else if(i > second)
      //Do smt
    else if(i > third)
      //Do smt
    int firstNumber=5;
    int secondNumber=3;
    int thirdNumber=4;

    int largestNumber=(firstNumber>secondNumber)?firstNumber:(secondNumber>thirdNumber)?secondNumber:thirdNumber;
    System.out.println("largestNumber : "+largestNumber);

最简单的方法:

    List<Number> numbers = new ArrayList<Number>();
    numbers.add(5);
    numbers.add(4);
    numbers.add(3);
    numbers.add(2);
    numbers.add(1);
    numbers.add(6);

    SortedSet<Number> sortedNumbers= new TreeSet<Number>();
    sortedNumbers.addAll(numbers);
    SortedSet<Number> subSet = sortedNumbers.subSet(sortedNumbers.size()-2, sortedNumbers.size()+1);
    for (Number subSet1 : subSet) {
        System.out.println(""+subSet1);
    }

我的 leetcode 解决方案 python3 时间复杂度为 O(N)。

class Solution:
    def thirdMax(self, A: List[int]) -> int:
        sm=float('-inf')
        fm=float('-inf')
        tm=float('-inf')
        N=len(A)
        i=0
        while i<N:
            
            if A[i]>fm:
                tm=sm
                sm=fm
                fm=A[i]
            elif A[i]>sm and A[i]<fm:
                tm=sm
                sm=A[i]
            elif (A[i]>tm and A[i]<sm):
                tm=A[i]
            
            i+=1
            
             
        return tm if tm != float('-inf') else fm