public class Solution { class Bucket{ boolean valid =false; int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; } public int maximumGap(int[] nums) { if(nums == null || nums.length < 2) return 0; int min = nums[0]; int max = nums[1]; /* Calculate the maximum and minimum values **/ for(int i=0;i<nums.length;i++){ min = Math.min (nums [i], min); max = Math.max(nums[i], max); } /* Determine the number of buckets = number of numbers**/ int num_buc = nums.length; /* bucket interval **/ int distance = (max - min) / num_buc + 1; /*Create num_buc buckets**/ Bucket b_arr[] = new Bucket[num_buc]; for(int i=0;i<num_buc;i++) b_arr[i] = new Bucket(); for(int i=0;i<nums.length;i++){ int n = (nums[i] - min) / distance ; // bucket number (starting from 0) b_arr[n].valid = true; b_arr[n].max = Math.max(b_arr[n].max, nums[i]); b_arr[n].min = Math.min(b_arr[n].min, nums[i]); } /* The minimum value of the next valid bucket - the maximum value of the previous valid bucket */ int result = 0; for(int i=0;i<b_arr.length - 1;i++){ if(b_arr[i].valid == false){ //There is no data in the bucket continue; } for(int j=i+1;j<b_arr.length;j++){ if(b_arr[j].valid == true){ result = Math.max(result, b_arr[j].min - b_arr[i].max); break; } } } return result; } }
[LeetCode] 164. Maximum Gap
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=325486595&siteId=291194637
Recommended
Ranking