1 回答

TA貢獻1810條經驗 獲得超5個贊
沒有外部包的幫助,有沒有更有效的方法?節省任何時間都是很好的,因為這種計算經常發生。
那么這里是一種使用映射而不是數組的方法。
int categorizer = 10_000;
// Assume this is your array of ints.
int[] arrayOfInts = r.ints(4_000, 10_000, 1_400_000).toArray();
您可以像這樣將它們分組在地圖中。
Map<Integer, List<Integer>> ranges =
Arrays.stream(arrayOfInts).sorted().boxed().collect(
Collectors.groupingBy(n -> n / categorizer));
現在,當你想找到下一個更高的元素時,你可以獲得包含該數字的列表。
假設您想要下一個大于 982,828 的數字
int target = 982,828;
List<Integer> list = map.get(target/categorizer); // gets the list at key = 98
現在只需使用您喜歡的方法處理列表即可。一張紙條。在某些情況下,您的最高數字可能會出現在緊隨其后的其他列表中,具體取決于差距。您需要考慮到這一點,也許可以通過調整數字的分類方式或搜索后續列表來解決。但這可以大大減少您正在使用的列表的大小。
添加回答
舉報