414. Third Maximum Number
来源:互联网 发布:进出口贸易数据期刊 编辑:程序博客网 时间:2024/05/12 10:02
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.
法1:使用快排中的“切分” O(NlgN)
public class Solution { public int thirdMax(int[] nums){ HashSet<Integer> hashset=new HashSet<>(nums.length); for(int n : nums) hashset.add(n); int[] arr=new int[hashset.size()]; int cnt=0; for(int n :hashset) arr[cnt++]=n; int len=arr.length; if(len<3) { int max=Integer.MIN_VALUE; for(int i=0;i<len;i++) max=Math.max(arr[i], max); return max; } return findkth(arr, len-3, 0, len-1); }public int findkth(int[] nums,int k,int lo,int hi){int kth=partition(nums, lo, hi);int ele=nums[kth];if(kth>k)return findkth(nums, k, lo, kth);else if(kth<k)return findkth(nums, k, kth+1, hi);else {return ele;}}public int partition(int[] nums,int lo,int hi){if(lo==hi)return lo;int num=nums[lo];int i=lo,j=hi+1;while(true){while(nums[++i]<num)if(i==hi)break;while(nums[--j]>num)if(j==lo)break;if(i>=j)break;swap(nums, i, j);}swap(nums, lo, j);return j;}public static void swap(int[] arr ,int i, int j){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}
法2 ,使用三个变量直接检索,摘自
https://discuss.leetcode.com/topic/62236/java-solution-in-0ms-run-time-o-n-and-space-o-1/15
public int thirdMax(int[] nums) { long max = Long.MIN_VALUE, mid = max, min = max; for (int ele : nums) { if (ele > max) { min = mid; mid = max; max = ele; } else if (max > ele && ele > mid) { min = mid; mid = ele; } else if (mid > ele && ele > min) { min = ele; } } return (int)(min != Long.MIN_VALUE ? min : max);}
0 0
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number
- 414. Third Maximum Number*
- 414. Third Maximum Number
- 414. Third Maximum Number
- 【miscellaneous】软件加密方法
- hive中自定义UDAF、 UDTF、 UDF
- 字符串格式化 sprintf 2.0
- Linux 常用命令整理之一
- CF - 201A 找规律
- 414. Third Maximum Number
- linux 查询端口占用
- 第四场膜你赛总结
- Uva-10559 Blocksf(DP)
- 编译安装php7
- maven的安装以及常用的配置
- MATLAB一些基本命令或函数总结
- ROS实践(5)-调试相关
- PAT 1103. Integer Factorization