求陣列相鄰元素差值的最大值快速演算法 C 版

2021-07-07 09:59:11 字數 1213 閱讀 5362

題目:

整形陣列a,請設計乙個複雜度為o(n)的演算法,算出排序後相鄰兩數的最大差值。

給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。

思路:基於桶排序思想 n個數 n+1個桶 最後乙個桶存最大數 那麼最大差值一定在非空桶的相鄰2個桶之間 且=(空桶右邊 min -

空桶左邊max)

演算法複雜度:

時間複雜度:o(n)

空間複雜度:o(n)

貼**:

// 計算桶號(/第幾號桶)

int calbucketnum(long val, long len, long minval, long maxval)

int getmin(int a, int b)

int getmax(int a, int b)

// 桶排序思想

int maxgap(vectora, int n)

int min = a[0], max = a[0];

for(int i = 1; i < n; ++i)

// 最大值和最小值相等 返回0

if(min == max)

vectornotempty(n + 1, false); // 桶是否為空桶

vectormaxs(n + 1, 0); // 每個桶的最大值

vectormins(n + 1, 0); // 每個桶的最小值

// 桶號

int bucketnum = 0;

// 遍歷陣列元素 將其放入相應桶中

for(int i = 0; i < n; ++i)

// cnt —— 遍歷到第幾個桶

int cnt = 0, mx = 0;

// 遍歷n+1個桶

while(cnt <= n)

cnt++;

} int maxgap = 0;

// 待求的差值最大值一定出現在空桶附近的相鄰2個桶之間

while(cnt <= n)

cnt++;

} return maxgap;

}

測試函式:

int main(void)

; int len = sizeof(a) / sizeof(int);

vectorv(a, a + len);

gap g;

cout<

輸出:

陣列不相鄰元素之和的最大值

今天下午面試老虎 被問到這題,當時腦子有點蒙,沒寫出來。這題的意思就是給你乙個陣列,讓你計算元素的和,但是這些元素都不能相鄰,求最大的和。其實這題很常見,在leetcode上面也有,但是原題是這樣的 假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是...

陣列排序相鄰元素的最大差值

題目 給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o n 且要求不能用非基於比較的排序。解題思路 借助桶排序 created by yzm on 11 12 18.include include includeusing namespace std class maxgap in...

遞迴求陣列最大值

遞迴求陣列最大值 使用遞迴當方式求陣列中最大的值 public class diguigetmax int mid l r 2 int leftmax getmax a,0,mid int rightmax getmax a,mid 1,r return math.max leftmax,right...