Leetcode--164. 最大间距
給定一個無序的數組,找出數組在排序之后,相鄰元素之間最大的差值。
如果數組元素個數小于 2,則返回 0。
示例?1:
輸入: [3,6,9,1]
輸出: 3
解釋: 排序后的數組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。
示例?2:
輸入: [10]
輸出: 0
解釋: 數組元素個數小于 2,因此返回 0。
說明:
你可以假設數組中所有元素都是非負整數,且數值在 32 位有符號整數范圍內。
請嘗試在線性時間復雜度和空間復雜度的條件下解決此問題。
思路:桶排序
把幾個數字裝進一個桶,每次比較相鄰桶的差距,即現在桶的最小值與上一個桶的最小值
那么桶長應該是多少呢?
現在有n個數字,如果他們都是等差的,例如[2,4,6,8],那么每一個間距就是2,如果arr[i]與arr[i-1]的差距變小,那么arr[i]與arr[i+1]差距就變大,所以等差的時候桶的長度是所需最小的。
?int?t?=?Math.max(1,(max-min)/(nums.length-1));//桶長? ? 區間長度除以區間個數
int?sum?=?1+(max-min)/t;????//桶個數? ? 區間長度/桶長
提交的代碼:
class??Tong{
????int?max?=?-1;
????int?min?=?2147483647>>1;
}
class?Solution?{
????public?int?maximumGap(int[]?nums)?{
???????int?max?=?-1;
?????????int?min?=?2147483647>>1;
?????????if(nums.length<2)
?????????{
?????????????return?0;
?????????}
?????????int?i;
?????????for(i=0;i<nums.length;i++)
?????????{
?????????????max?=?Math.max(max,nums[i]);
?????????????min?=?Math.min(min,nums[i]);
?????????}
?????????int?t?=?Math.max(1,(max-min)/(nums.length-1));//桶長
?????????int?sum?=?1+(max-min)/t;????//桶個數
?????????
?????????Tong?tong[]?=?new?Tong[sum];
?????????//System.out.println(tong[0].max);
?????????for(i=0;i<nums.length;i++)
?????????{
?????????????int?x?=?(nums[i]-min)/t;
?????????????if?(tong[x]?==?null)?
?????????????{
?????????????????tong[x]?=?new?Tong();
?????????????}
?????????????tong[x].max?=?Math.max(nums[i],?tong[x].max);
?????????????tong[x].min?=?Math.min(nums[i],?tong[x].min);
?????????}
?????????int?maxgap=0;
?????????min?=?2147483647>>1;
?????????for(i=0;i<sum;i++)
?????????{
?????????????if(tong[i]==null)
?????????????{
?????????????????continue;
?????????????}
?????????????if(min==2147483647>>1)
?????????????{
?????????????????min?=?tong[i].max;
?????????????????continue;
?????????????}
?????????????maxgap?=?Math.max(maxgap,tong[i].min-min);?
?????????????min?=?tong[i].max;
?????????}
?????????return?maxgap;
????}
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Leetcode--164. 最大间距的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】面试题25:合并两个排
- 下一篇: jsp出现The import Xxx