小演算法
問題概述:
最大相鄰差
求一無序陣列排序後兩個數相鄰的最大距離
例:原陣列: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...