1. 程式人生 > 其它 >#力扣 LeetCode414. 第三大的數 @FDDLC

#力扣 LeetCode414. 第三大的數 @FDDLC

技術標籤:演算法&資料結構

題目描述:

https://leetcode-cn.com/problems/third-maximum-number/

Java程式碼:

class Solution { //給定一個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。
    public int thirdMax(int[] nums) { //要求演算法時間複雜度必須是O(n)。
        int $1=nums[0],$2=0,$3=0; //$2,$3初始值隨意
        boolean exist$2=false,exist$3=false;
        for(int num:nums){
            if(num>$1){
                if(exist$2){
                    $3=$2;
                    exist$3=true;
                }
                $2=$1;
                exist$2=true;
                $1=num;
            }else if(num<$1){
                if(exist$2){
                    if(num>$2){
                        $3=$2;
                        exist$3=true;
                        $2=num;
                    }
                    else if(num<$2){
                        if(exist$3){
                            if(num>$3)$3=num;
                        }
                        else{
                            $3=num;
                            exist$3=true;
                        }
                    }
                }else{
                    $2=num;
                    exist$2=true;
                }
            }
        }
        return exist$3?$3:$1;
    }
}

Java程式碼二:

class Solution {
    public int thirdMax(int[] nums) {
        long a=Long.MIN_VALUE,b=Long.MIN_VALUE,c=Long.MIN_VALUE; //a最大
        for(int num:nums){
            if(num>a){
                c=b;
                b=a;
                a=num;
            }else if(num<a){
                if(num>b){
                    c=b;
                    b=num;
                }else if(num<b&&num>c)c=num;
            }
        }
        return c==Long.MIN_VALUE?(int)a:(int)c;
    }
}

Java程式碼三:

import java.util.Collections;
import java.util.LinkedList;

class Solution {
    public int thirdMax(int[] nums) {
        LinkedList<Long> list=new LinkedList<>();
        Collections.addAll(list,Long.MIN_VALUE,Long.MIN_VALUE,Long.MIN_VALUE);
        for(int num:nums){
            if(num>list.get(0))list.add(0,(long)num);
            else if(num<list.get(0)){
                if(num>list.get(1))list.add(1,(long)num);
                else if(num<list.get(1)&&num>list.get(2))list.add(2,(long)num);
            }
        }
        return list.get(2)==Long.MIN_VALUE?(int)(long)list.get(0):(int)(long)list.get(2);
    }
}