#力扣 LeetCode414. 第三大的數 @FDDLC
阿新 • • 發佈:2021-01-01
技術標籤:演算法&資料結構
題目描述:
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); } }