import java.util.*; /** * NC389 最大差值(二) * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int maxGap (ArrayList<Integer> nums) { return solution1(nums); // return solution2(nums); // return solution3(nums); } /** * 小根堆 * @param nums * @return */ private int solution1(ArrayList<Integer> nums){ int max = 0; int n = nums.size(); if(n < 2){ return max; } PriorityQueue<Integer> minHeap = new PriorityQueue<>(); for(int num: nums){ minHeap.offer(num); } int pre = minHeap.poll(); int top,gap; while(!minHeap.isEmpty()){ top = minHeap.poll(); gap = top-pre; max = Math.max(max, gap); pre = top; } return max; } /** * TreeSet * @param nums * @return */ private int solution2(ArrayList<Integer> nums){ int max = 0; int n = nums.size(); if(n < 2){ return max; } TreeSet<Integer> treeSet = new TreeSet<>(); for(int num: nums){ treeSet.add(num); } int pre = treeSet.pollFirst(); int top,gap; while(!treeSet.isEmpty()){ top = treeSet.pollFirst(); gap = top-pre; max = Math.max(max, gap); pre = top; } return max; } /** * 直接排序 * @param nums * @return */ private int solution3(ArrayList<Integer> nums){ int max = 0; int n = nums.size(); if(n < 2){ return max; } Collections.sort(nums); int gap; for(int i=1; i<n; i++){ gap = nums.get(i)-nums.get(i-1); max = Math.max(max, gap); } return max; } }