最大相鄰差

2021-10-07 05:25:45 字數 2522 閱讀 4280

小演算法

問題概述:

最大相鄰差

求一無序陣列排序後兩個數相鄰的最大距離

例:原陣列:1 3 2 4 7 6 2

排序後:1 2 2 3 4 6 7

相鄰差:1 0 1 1 2 1

最大相鄰差:2

思路:

利用計數排序或桶排序的思路

計數排序:當兩個下標之間的0的個數最多時,這兩個數的差值就是最大相鄰差

如例:

package algorithm;

/** * 最大相鄰差

* 求一無序陣列排序後兩個數相鄰的最大距離

* 例:

* 原陣列:1 3 2 4 7 6 2

* 排序後:1 2 2 3 4 6 7

* 相鄰差:1 0 1 1 2 1

* 最大相鄰差:2

*/public

class

adjacentdifference

;//int t = ;

int[

] t =

;int max =

getmax

(t);

int min =

getmin

(t);

int i =

adjacentdifference

(t, min, max)

; system.out.

println

(i);

int i1 =

adjacentdifference2

(t, min, max)

; system.out.

println

(i1);}

public

static

intgetmax

(int

t)return max;

}public

static

intgetmin

(int

t)return min;

}//獲取最大相鄰差,採用計數排序的思想

//缺點:如果陣列為1 87 85 89 100,則需要建立長度為100的陣列較為浪費

//改進使用桶,見adjacentdifference2方法

public

static

intadjacentdifference

(int

t,int min,

int max)

//建立輔助陣列,類似記數排序

int[

] array =

newint

[mid+1]

;for

(int i =

0; i< t.length; i++

)//尋找最大差值

int left =0;

int maxdistance =0;

for(

int i =

1; i < array.length; i++)if

(i - left > maxdistance)

left = i;

}return maxdistance;

}private

static

class

bucket

/** * 採用桶排序的思想

* 在乙個桶內只儲存區間的最大值與最小值,

* 之後用前乙個桶的最大值與後乙個桶的最小值比較**/

public

static

intadjacentdifference2

(int

t,int min,

int max)

//初始化桶,根據原陣列元素個數,建立n個桶

int bucketnum = t.length;

bucket[

] buckets =

newbucket

[bucketnum]

;for

(int i =

0; i < bucketnum; i++

)//遍歷原始陣列元素,確定每個桶的最大值與最小值

for(

int i =

0; i < t.length; i++)if

(buckets[index]

.max == null || buckets[index]

.max < t[i])}

//遍歷桶,找到最大差值

int leftmax = buckets[0]

.max;

int maxdistance =0;

for(

int i =

1; i < buckets.length; i++)if

(buckets[i]

.min - leftmax > maxdistance)

leftmax = buckets[i]

.max;

}return maxdistance;

}}

問題擴充套件:

無序陣列排序後的最大相鄰差

無序陣列排序後的最大相鄰差 public class maxdis int d max min 1.如果 max和min相等則說明陣列中所有元素都相等則,返回0 if d 0 2.初始化桶 int bucketnum array.length bucket buckets newbucket buc...

相鄰最大差值

題目 請設計乙個複雜度為o n 的演算法,計算乙個未排序陣列中排序後相鄰元素的最大差值。給定乙個整數陣列a和陣列的大小n,請返回最大差值。designed by wyq 分析 這是乙個典型的利用桶排序求解問題,因為桶排序不少基於比較的排序可以打破nlogn的下限,可以達到題目要求的複雜度n 相鄰兩個...

不相鄰最大和

description n個數的序列,選出任意個,要求不能相鄰,求不相鄰的最大和。input 第一行是乙個正整數 n。第二行是n 個用空格隔開的正整數。output 只有乙個正整數,為不相鄰的最大和。sample input 53 10 8 20 21 sample output 325 n 100...