leetcode题解-414. Third Maximum Number
来源:互联网 发布:cfa淘宝代报名靠谱吗 编辑:程序博客网 时间:2024/06/05 16:17
题目:
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: 1Explanation: The third maximum is 1.Example 2:Input: [1, 2]Output: 2Explanation: The third maximum does not exist, so the maximum (2) is returned instead.Example 3:Input: [2, 2, 3, 1]Output: 1Explanation: Note that the third maximum here means the third maximum distinct number.Both numbers with value 2 are both considered as second maximum.
本题是要寻找数组中第三大的数,我们的第一种思路就是使用三个数来保存最大的三个数,便利数组的同时进行修改即可。代码入下:
public int thirdMax1(int[] nums){ Integer max1 = null; Integer max2 = null; Integer max3 = null; for (Integer n : nums) { if (n.equals(max1) || n.equals(max2) || n.equals(max3)) continue; if (max1 == null || n > max1) { max3 = max2; max2 = max1; max1 = n; } else if (max2 == null || n > max2) { max3 = max2; max2 = n; } else if (max3 == null || n > max3) { max3 = n; } } return max3 == null ? max1 : max3; }
此外,我们还可以使用一个变量来保存数字,一个变量来表示当前保存的是第几大的数字。首先将数组进行排序,然后从数组的最后开始遍历,即从最大的数字开始遍历。代码入下:
public int thirdMax(int[] nums) { int res=Integer.MIN_VALUE, count=0; Arrays.sort(nums); for(int i=nums.length-1; i>=0; i--){ if(res != nums[i]){ res = nums[i]; count++; if(count == 3) break; } } if(count<3) return nums[nums.length-1]; return res; }
这两种方法思路差不多,效率也很相近。此外我还看到一种使用priorityQueue的方法,使用优先级队列来保存最大的三个数字。但是因为其本身效率很低,所以代码耗时较长。代码入下:
public int thirdMax2(int [] nums){ PriorityQueue<Integer> pq = new PriorityQueue<>(); Set<Integer> set = new HashSet<>(); for(int num : nums){ if(!set.contains(num)){ pq.offer(num); set.add(num); if(pq.size() > 3) set.remove(pq.poll()); } } if(pq.size()<3) while(pq.size()>1) pq.poll(); return pq.peek(); }
0 0
- leetcode题解-414. Third Maximum Number
- LeetCode题解(Week 1):414. Third Maximum Number
- 【数组】Leetcode编程题解:414. Third Maximum Number
- leetcode 414. Third Maximum Number
- LeetCode:414. Third Maximum Number
- LeetCode-414. Third Maximum Number
- LeetCode 414. Third Maximum Number
- [Leetcode]414. Third Maximum Number
- LeetCode 414. Third Maximum Number
- <leetcode>414. Third Maximum Number
- Leetcode 414. Third Maximum Number
- 【LeetCode】 414. Third Maximum Number
- [leetcode]414. Third Maximum Number
- Leetcode-414. Third Maximum Number
- [leetcode]414. Third Maximum Number
- LeetCode 414. Third Maximum Number
- [LeetCode]414. Third Maximum Number
- Leetcode-414. Third Maximum Number
- Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to
- Error: L6218E: Undefined symbol main (referred from_rtentry2.0)
- LinkedTransferQueue 理解
- 杭电oj(java版)——1094
- 【MySQL基础】数据库概述
- leetcode题解-414. Third Maximum Number
- oletools下载安装及rtfobj使用
- NYOJ 2126 Buy souvenirs(01背包+输出方案数)
- Expression 核心操作符、表达式、操作方法
- C#装配件
- python3.6安装scrapy
- git
- springMVC两种方式实现多文件上传及效率比较
- mean(mongodb+express+angularjs+nodejs) web开发在线参考资料