Maximum Gap
Description
Given an unsorted array, find the maximum difference between the successive elements in its sorted form.
Return 0 if the array contains less than 2 elements.
Example 1:
Input: [3,6,9,1] Output: 3 Explanation: The sorted form of the array is [1,3,6,9], either (3,6) or (6,9) has the maximum difference 3.
Example 2:
Input: [10] Output: 0 Explanation: The array contains less than 2 elements, therefore return 0.
Note:
- You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
- Try to solve it in linear time/space.
Solution(javascript)
/** O(nlog(n))
 * @param {number[]} nums
 * @return {number}
 */
// const maximumGap = function (nums = []) {
//   nums.sort((a, b) => a - b)
//   let max = 0
//   for (let i = 1; i < nums.length; i++) {
//     max = Math.max(max, nums[i] - nums[i - 1])
//   }
//   return max
// }
// Radix Sort
const maximumGap = function (nums = []) {
  const maxValue = Math.max(...nums)
  const countingSort = (place) => {
    const count = []
    nums.forEach((num) => {
      const index = Math.floor(num / place) % 10
      count[index] = count[index] || []
      count[index].push(num)
    })
    return count.reduce((acc, v) => {
      if (v !== undefined) {
        acc = acc.concat(v)
      }
      return acc
    }, [])
  }
  let place = 1
  while (Math.floor(maxValue / place) > 0) {
    nums = countingSort(place)
    place *= 10
  }
  let max = 0
  for (let i = 1; i < nums.length; i++) {
    max = Math.max(max, nums[i] - nums[i - 1])
  }
  return max
}