Given an unsorted array, find the maximum difference between the successive(相邻的) elements in its sorted form.
Try to solve it in linear time / space.
Return 0 if the array contains less than 2 elements.
You may assume all elements in the array are non - negative integers and fit in the 32 - bit signed integer range.
//如果我们
题意:
给定一个未排序的数组,把数组排序,找出相邻元素之间的最大差值。
思路:
刚开始思路是最直接的方法是先用快排排序再找相邻元素的最大差值。但是因为快速排序的时间复杂度是O(n * log(n)),而题目要求的时间复杂度是:O(n),所以不符合题目要求。
基于桶排序的思路:桶排序的原理,首先获取所排序数组a中最大数的位数,然后根据位数循环分发原数组的元素到一个临时的二维数组b中去(临时二维数组有10行,列数和排序数组中列数相同),分发的规则是根据个位、十位、百位、、、的大小来进行分发,从个位开始逐渐到高位,每次分发后都要回收(即把b中每行中记录的a的数据重新写到a中,每一位的比较都要回收),当比较完a中最大数的最高位时,a所回收的b中的序列即为排序好的序列。
简单原理就是:根据每一位的大小进行排序(从个位到最高位),每位比较一次进行结束就进行回收,那么此位就会按照大小进行排序。
1 | //获取nums数组中最大的元素位数 |