目錄
一、題目描述
二、解題思路
三、**實現
給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。
如果陣列元素個數小於 2,則返回 0。
示例 1:
輸入: [3,6,9,1]示例 2:輸出: 3
解釋: 排序後的陣列是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。
輸入: [10]說明:輸出: 0
解釋: 陣列元素個數小於 2,因此返回 0。
排序方式
時間複雜度
空間複雜度
穩定性選擇排序
o(n^2)
o(1)
no氣泡排序
o(n^2)
o(1)
yes插入排序
o(n^2)
o(1)
yes歸併排序
o(nlogn)
o(n)
yes快速排序
o(nlogn)
o(logn)
no堆排序
o(nlogn)
o(1)
no桶排序(基數排序)
o(n)
o(n)
發現符合題目要求的排序方式只有基數排序了。注意桶排序還有一種方法叫做計數排序,但是計數排序顯然在本題不適合,因為數值太大,會導致開的空間非常大,效率並不會很好。
排好序之後求間距只要遍歷一遍即可,沒什麼難度。
傳統的桶排序是需要借用佇列,因為先進桶的資料需要先出桶,然後按照基數從0~9的大小順序依次排序。開10個佇列的開銷顯然不小。我的做法是(學到大佬的):
**裡會有詳細註解
#includeusing namespace std;
//得到陣列中最大數的位數
int maxbits(vector& arr)
int res = 0;
while (maxnums != 0)
return res;
}int getdigit(int num, int d)
void radixsort(vector& arr, int left, int right, int digit)
//按從小到大累加數字的次序
//記錄出桶時應處的位置
for (int i = 1; i < radix; i++)
//對滿足該數字上數字大小的順序排序放進臨時陣列中
//一定要倒序遍歷,因為後進桶的數的位置靠後
for (int i = right; i >= left; i--)
//把一趟排的結果重新賦給arr,對下乙個數字上的數字進行排序,周而復始
for (int i = left, j = 0; i <= right; i++, j++) }}
int maximumgap(vector& nums)
return maxgap;
}int main() ;
cout << maximumgap(arr) << endl;
return 0;
}
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 ...