LeetCode 最大間距

2021-09-11 07:47:56 字數 2246 閱讀 8086

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

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

示例 1:

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

輸出: 3

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

示例 2:

輸入: [10]

輸出: 0

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

說明:

你可以假設陣列中所有元素都是非負整數,且數值在 32 位有符號整數範圍內。
思路分析:需要知道最大間距,那麼一般來說是要先進行排序的,時間複雜度為o(n)的排序方法中,好像我就知道計數排序、桶排序。

方法一:使用map容器輔助,進行計數排序。(但是map自動排序的複雜度貌似是o(nlogn))

class solution 

mapmymap;//輔助容器,用於標記各個元素的出現的次數

//掃瞄nums

for (int index = 0; index < numssize; ++index)

int maxgap = 0;//存放結果

map::iterator before = mymap.begin();

//再次掃瞄容器,判斷排序好的左右兩端的間距差

方法二:使用桶排序,但不建立正真的桶,而是虛設的桶,只保留桶中的最大值、最小值。桶的數量為nums.size() + 1,所以每個桶至多只有乙個元素,(且最小值放在第乙個桶,最大值放在最後乙個桶),只設立每個桶的最大值、最小值變數。再將所有元素都放入它應該在的桶序號,最後掃瞄所有的桶,求出間距。

class solution 

int maximumgap(vector& nums)

int maxvalue = *max_element(nums.begin(), nums.end());//獲取桶中的最大值

int minvalue = *min_element(nums.begin(), nums.end());//獲取桶中的最小值

if (maxvalue == minvalue)

int bucketcnt = numssize + 1;//桶的個數

vectormaxbucket(bucketcnt, int_min);//新建長度bucketsize的vector容器,maxbucket[i]用於儲存第i個桶的最大值

vectorminbucket(bucketcnt, int_max);//新建長度bucketsize的vector容器,minbucket[i]用於儲存第i個桶的最小值

maxbucket[0] = minbucket[0] = minvalue;//第乙個桶只儲存最小值

maxbucket[bucketcnt - 1] = minbucket[bucketcnt - 1] = maxvalue;//最後乙個桶只儲存最大值

for (auto num : nums)

int maxgap = int_min, preindex = 0;

//掃瞄所有的桶,計算桶之間的間距

for (int index = 1; index < bucketcnt; ++index)

if (preindex == bucketcnt)

index = preindex + 1;

//跳過空桶

while (index < bucketcnt && maxbucket[index] == int_min)

if (index == bucketcnt)

//更新間距

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 ...