leetcode[Third Maximum Number]
来源:互联网 发布:java中方法的返回值 编辑:程序博客网 时间:2024/05/22 03:18
解法一:
public class Solution { public int thirdMax(int[] nums) { //因为大小相同时不分先后,所以先去除重复元素,既然用了set干脆直接用TreeSet排序 TreeSet<Integer> set = new TreeSet<>(); for(int i = 0; i < nums.length; i++){ set.add(nums[i]); } if(set.size() < 3){ return set.last(); } else{ set.remove(set.last()); set.remove(set.last()); return set.last(); } }}
解法二:
public class Solution { public int thirdMax(int[] nums) { //既然只是找第三大的元素,就不用将整个数组进行排序 //使用Integer可以通过判断是否为null来判断这个元素是否被更新过 Integer max1 = null, max2 = null, max3 = null; for(Integer n : nums){//都用Integer来统一 if(n.equals(max1) || n.equals(max2) || n.equals(max3)){ continue;//之前重复了的元素不处理 } if(max1 == null || n > max1){//这两种情况都可以对max1进行更新 /*max1 = n;//更新最大值 //相应的,第二大、第三大也要更新 max2 = max1; max3 = max2;*/ //更新的顺序有影响,上面那个顺序不对 max3 = max2; max2 = max1; max1 = n; } else if(max2 == null || n > max2){ max3 = max2; max2 = n; } else if(max3 == null || n > max3){ max3 = n; } } if(max3 == null) return max1; else return max3; }}
解法三:
public class Solution { public int thirdMax(int[] nums) { //既然只是找第三大的元素,就不用将整个数组进行排序 /* 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。 PriorityQueue是从JDK1.5开始提供的新的数据结构接口。 如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。*/ //使用优先队列来保存数组中最大的三个元素,用set来保证元素不重复 PriorityQueue<Integer> pq = new PriorityQueue<>(); HashSet<Integer> set = new HashSet<>(); for(int val : nums){ if(!set.contains(val)){//重复元素不要 pq.add(val); set.add(val); if(pq.size() > 3){ set.remove(pq.poll());//移除队首元素,集合中的元素也移出,加进去就加进去,优先队列自己会排序比较大小 } } } if(pq.size() < 3){ while(pq.size() > 1){ pq.poll();//为了返回最大的元素 } } return pq.peek();//此时队首元素要么是第三大的元素,要么是最大的元素(因为上面那四行移走了一些元素) }}
利用TreeSet对解法三的改进(TreeSet综合了优先队列与普通Set):
public class Solution { public int thirdMax(int[] nums) { //既然只是找第三大的元素,就不用将整个数组进行排序 //采用TreeSet来保存最大的三个元素,不断更新 TreeSet<Integer> set = new TreeSet<>(); for(int val : nums){ if(set.contains(val)) continue; else{ set.add(val);//加进去就行,TreeSet自己会排序,后面大小超出3再移出最小的元素 if(set.size() > 3){ set.pollFirst();//移出集合的第一个元素,也就是最小的元素 } } } if(set.size() < 3){ while(set.size() > 1){ set.pollFirst(); } } return set.first(); }}
阅读全文
0 0
- LeetCode Third Maximum Number
- LeetCode-Third Maximum Number
- [Leetcode] Third Maximum Number
- LeetCode: Third Maximum Number
- leetcode---Third Maximum Number
- LeetCode : Third Maximum Number
- leetcode[Third Maximum Number]
- LeetCode Third Maximum Number
- leetCode-Third Maximum Number
- LeetCode #414: Third Maximum Number
- leetcode 414. Third Maximum Number
- LeetCode:414. Third Maximum Number
- LeetCode-414. Third Maximum Number
- Leetcode之Third Maximum Number
- LeetCode 414. Third Maximum Number
- [Leetcode]414. Third Maximum Number
- LeetCode 414. Third Maximum Number
- <leetcode>414. Third Maximum Number
- 【树状数组】poj 3067 Japan(树状数组求逆序数)
- Set容器使用指针的一些问题
- laravel基础
- HQL多表查询
- 在Eclipse 中设置JVM 内存
- leetcode[Third Maximum Number]
- 9265:取数游戏
- SpringAOP动态拦截方法并重写
- Kotlin系统入门与进阶(一)
- Java中使用TCP协议的简单连接
- 利用ES6中的模板字符串轻松实现多行和字符串值的插入
- maven exclude 排除文件夹
- cross entropy
- intell IDEA 代码自动提示功能没有LE ---File >Power Save Mode 被勾选了 去掉勾选就可以了