[路飞]_js算法:leetcode 164-最大间距

78 阅读1分钟

leetcode 164. 最大间距

问题描述: 给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。

您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。

示例 1:

输入: nums = [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9]  ,  其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3

示例 2:

输入: nums = [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0

思路:

/**
 * @param {number[]} nums
 * @return {number}
 */
var maximumGap = function(nums) {
    let n=nums.length;
  if(n<2)return 0;
  let maxNum=0;
    maxNum=Math.max(...nums)
  let pix=1;
  let buf=new Array(n).fill(0);
  
  while(pix<=maxNum){
    let cnt=new Array(10).fill(0);
    for(let i=0;i<n;i++){
      let digit=Math.floor(nums[i]/pix)%10;
      cnt[digit]++;
    }
    for(let i=1;i<10;i++){
      cnt[i]+=cnt[i-1]
    }
    for(let i=n-1;i>=0;i--){
      let digit=Math.floor(nums[i]/pix)%10;
      buf[cnt[digit]-1]=nums[i]
      cnt[digit]--

    }
    nums.splice(0,n,...buf);
    pix*=10
  }
  let res=0;
  for(let i=1;i<n;i++){
res=Math.max(res,nums[i]-nums[i-1])
  }
  return res;

};