** 缺點:當陣列中元素懸殊很大時,如1、2、100000000,則需要構造乙個長度是100000000的新陣列array,則該方法不可取。**
假設原陣列長度為n
最大差值肯定出現在空桶附近。(非空桶內部最大差值d)
空間複雜度:o(n),時間複雜度:o(n)(總共掃瞄3次)。
int maxgap(std::vector&vecnum)
else if (nmin > vecnum[nindex])
}// 桶的個數
int nbucketnum = vecnum.size() + 1;
// 每個桶的區間長度
int nbucketlength = (nmax - nmin) / vecnum.size();
// 記錄桶的最小值
std::vectorvecbucketmin(nbucketnum, int_max);
// 記錄桶的最大值
std::vectorvecbucketmax(nbucketnum, int_min);
// 獲取每個桶內的最小和最大值
for (int nindex = 0; nindex < vecnum.size(); nindex++)
if (vecbucketmin[nbucketindex] > vecnum[nindex])
}// 計算每乙個空桶右端非空桶中的最小值,與空桶左端非空桶的最大值的差
int nmaxgap = 0;
int npremax = vecbucketmax[0];
bool nemptybucket = false;
for (int nbucketindex = 1; nbucketindex < nbucketnum; nbucketindex++)
npremax = vecbucketmax[nbucketindex];
nemptybucket = false;
} else
}return nmaxgap;
}
桶 求無序陣列排序後,最大的相鄰差值
引言 無限長的無序陣列 正負零都有可能。求出排序後最大的相鄰的差值 時間複雜度o n 且要求不能用非基於比較的排序 思路1.找出陣列中的最大元素,分配最大元素 1個桶,對桶等分如一號桶 0 9 二號桶 10 19 2.因為元素最大是n,所以準備了n 1個桶,所以肯定最小桶和最大桶肯定有數,中間有空桶...
無序陣列排序後的最大相鄰差
無序陣列排序後的最大相鄰差 public class maxdis int d max min 1.如果 max和min相等則說明陣列中所有元素都相等則,返回0 if d 0 2.初始化桶 int bucketnum array.length bucket buckets newbucket buc...
求兩個排序陣列的中位數
設x 1.n 和y 1.n 為兩個陣列,每個都包含n個已排序好的數。給出乙個求陣列x和y中所有2n個元素的中位數的 o lgn 時間的演算法。演算法思想 該演算法類似於二分查詢演算法 1.兩個陣列中小於median的個數為 n 1 個,假設該median為陣列a中的第k個,k為陣列下標,那麼在陣列a...