我試圖解決一個需要在數組中找到最大值的問題。該數組不能進行強力搜索,因爲它非常大(超過100,000,000個元素),所以我試圖創建二進制搜索的修改版本以查找最大值。從索引的任意一側查找數組中的最大值
數組的特定屬性是:
- 陣列是圓形
- 從最小值的陣列中的索引開始過去該索引的所有值將增加或保持不變,直到所述指數最大值。從這裏的值將保持不變或減少
- 最小值的索引是最大值
某些陣列的實例是(所有等效陣列)的索引相對:
{1, 2, 3, 4, 5, 5, 4, 3, 2, 1}
{5, 4, 3, 2, 1, 1, 2, 3, 4, 5}
{3, 4, 5, 5, 4, 3, 2, 1, 1, 2}
有沒有人有任何想法來解決這個問題在大約O(logN)時間?
如何計算數組值:
unsigned long long calculateArrayValue(unsigned long long location, unsigned long long n, unsigned long long arrayLength, unsigned long long* arrayIndices, unsigned long long* locationMagnitude) {
unsigned long long value = 0;
unsigned long long halfArrayLength = arrayLength/ 2;
unsigned long long difference;
for (unsigned long long i = 0; i < n; i++) {
if (arrayIndices[i] > location) {
difference = arrayIndices[i] - location;
} else {
difference = location - houseLocations[i];
}
if (difference > halfArrayLength) {
difference = arrayLength - difference;
}
value += difference * locationMagnitude[i];
}
return value;
}
你能否澄清「最小值的指數爲最大值的指數相反」。我沒有完全相反。 – Swapnil
基本上說最小值的指數是6,最大值的指數是(6 + n/2)%n; – 1qaz0okm