題目:
整形陣列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...