题目:leetcode 164

class Solution {public int maximumGap(int[] nums) {if(nums.length<2){return 0;}radixSort(nums);int max = 0;for(int i = 1;i<nums.length;i++){max=Math.max(max,nums[i]-nums[i-1]);}return max;}public void radixSort(int[] nums){int max = Arrays.stream(nums).max().getAsInt();//查找最大值//按照个位,十位,百位。。。直到最高位for(int i = 1;max/i>0;i*=10){countinSort(nums,i);}}public void countinSort(int[] nums,int radix){int n = nums.length;int[] output=new int[n];int[] count = new int[10];//0-9for(int num:nums){int dig = (num/radix)%10;count[dig]++;} //次数累加,以此找到元素对应的位置for(int i = 1;i<10;i++){count[i]+=count[i-1];}//倒序目的是为了保证对上次排序的相对位置不变// 如:对按照个位排序的结果【21,42,23】 ,按照十位排序,则 23还在21后面,相对位置不变for(int i = n-1;i>=0;i--){int dig =(nums[i]/radix)%10;output[count[dig]-1]=nums[i];count[dig]--;}// 将排序结果复制回原数组// 参数解释:// output:源数组。// 0:源数组起始位置。// nums:目标数组。// 0:目标数组起始位置。// n:要复制的元素数量。System.arraycopy(output, 0, nums, 0, n);}}
Arrays.stream(nums)将数组 nums 转换为一个 IntStream(整数流),便于后续操作。.max()调用流的 max() 方法,返回一个 OptionalInt 对象(可能包含最大值,或为空数组时为空)。.getAsInt()从 OptionalInt 中提取最大值(若数组为空会抛出 NoSuchElementException,但题目已约束 nums.length ≥ 1)。