LeetCode 164 最大間距

2021-10-17 03:07:52 字數 1829 閱讀 6483

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。

如果陣列元素個數小於 2,則返回 0。

示例 1:

輸入: [3,6,9,1]

輸出: 3

解釋: 排序後的陣列是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。

示例 2:

輸入: [10]

輸出: 0

解釋: 陣列元素個數小於 2,因此返回 0。

題目要求時間複雜度為o(n)利用桶排序

假設陣列中最大值和最小值分別為maxmin

我們可以知道相鄰最大間距不會小於(max - min) / (n - 1)

所以將每個桶的大小設定為(max - min) / (n - 1),這樣就不用考慮桶內的距離大於最終結果

只需要看前乙個桶的最大值和當前桶的最小值的差值,保留住最大差值

class

solution

// 找出最大值和最小值

int max = integer.min_value, min = integer.max_value;

for(

int num : nums)

// 特殊情況: 所有數字一樣

if(max - min ==0)

// 存放每個桶的最小值

int[

] bucketmin =

newint

[n -1]

; arrays.

fill

(bucketmin, integer.max_value)

;// 存放每個桶的最大值

int[

] bucketmax =

newint

[n -1]

; arrays.

fill

(bucketmax, integer.min_value)

;// 確定桶的間距

int interval =

(int

) math.

ceil((

double

)(max - min)

/(n -1)

);// 將數放入桶

for(

int num : nums)

int index =

(num - min)

/ interval;

// 更新每個桶的最大最小值

bucketmax[index]

= math.

max(bucketmax[index]

, num)

; bucketmin[index]

= math.

min(bucketmin[index]

, num);}

int maxgap =0;

int premax = min;

// 前乙個桶的最大值

for(

int i =

0; i < n -

1; i++

) maxgap = math.

max(maxgap, bucketmin[i]

- premax)

; premax = bucketmax[i];}

// 別忽略最後乙個數(最後乙個數沒放進桶)

return math.

max(maxgap, max - premax);}

}

LeetCode 164 最大間距

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。示例 2 輸入 10 輸出 0解釋 陣列元素個數小於 2,因此...

leetcode 164 最大間距

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。第一時間想到的也是最簡單的,先將所給陣列排序,再遍歷一遍陣列找出最大間距 複雜度分析 首先我們來了解一下桶排序的思想。桶排序是體現了分治的思想。原理是建立若干個桶,通過某種對映將待排序的元素放置到桶...

leetcode 164 最大間距

目錄 一 題目內容 二 解題思路 三 給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3 解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。示例 2 輸入 10 ...