原题链接:Third Maximum Number
分析:找出第三大的数,这是找出第K大的数这道题的一个简易版,当然可以使用找第K大的数的做法(快排,partition,O(N))。这里我们使用的是简单的找最大值的方法,找出第一个的数,找出第二大的数,找出第三大的数,就是结果。
题解:
public class Solution {
public int thirdMax(int[] nums) {
/*
Time Complexity:O(N)
Space Complexity:O(1)
*/
int f=nums[0],s=f,t=s;
boolean flag=false;
boolean exist=false;
for(int i=0;i<nums.length;i++){
if(nums[i]>f)f=nums[i];
}
for(int i=0;i<nums.length;i++){
if(nums[i]==f)continue;
if(!flag){
s=nums[i];
flag=true;
}
if(nums[i]>s)s=nums[i];
}
flag=false;
for(int i=0;i<nums.length;i++){
if(nums[i]==f || nums[i]==s)continue;
if(!flag){
t=nums[i];
flag=true;
exist=true;
}
if(nums[i]>t)t=nums[i];
}
return exist?t:f;
}
}
本文介绍了一种高效算法来解决寻找数组中第三大数值的问题。通过遍历数组并逐步更新最大、次大及第三大的数值,最终找到答案。这种方法的时间复杂度为O(N),空间复杂度为O(1)。
797

被折叠的 条评论
为什么被折叠?



