leetCode164 最大間距

2021-10-10 21:21:41 字數 1827 閱讀 2402

目錄

一、題目描述

二、解題思路

三、**實現

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

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

示例 1:

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

輸出: 3

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

示例 2:

輸入: [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 ...