[Leetcode]414. Third Maximum Number

问题:

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.


思路1:

利用TreeSet的自动升序功能,以及元素不重复原理,,其中涉及到迭代。时间复杂度是O(n)

代码如下:

public class Solution {
    public int thirdMax(int[] nums) {
        Set<Integer> set = new TreeSet<Integer>();
for(int i= 0 ; i < nums.length;i++){
set.add(nums[i]);
}
Iterator it = set.iterator();
if(set.size() == 2){
int a = (Integer)it.next();
int b = (Integer)it.next();
return b;
}
else if(set.size() == 1){
int c = (Integer)it.next();
return c;
}else{
int count =0;
int d =0;
while(it.hasNext()){
d = (Integer)it.next();
count++;
System.out.println(count + " size" +set.size());
if(set.size()==count+2){
break;
}
}
return d;
}
}
        
}


思路2:

对元素组进行 自动排序,利用Arrays.sort()函数,然后在利用List存储不重复的数,过滤重复的数,重复的存储一次。

代码如下:

public class Solution {
    public int thirdMax(int[] nums) {
int length = nums.length;
if (length == 1) {
return nums[0];
} else if (length == 2) {
int max = Math.max(nums[0], nums[1]);
return max;
} else {
int []a = new int[length];
List<Integer>list = new ArrayList<Integer>();
for(int i = 0 ; i < length;i++){
a[nums[i]-1]=nums[i];
}
for(int j = length-1; j >=0;j++){
if(!list.contains(nums[j]))
list.add(nums[j]);
}
for(int m = 0; m < length;m++){
System.out.println(list.get(m));
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值