我有一个int类型的排序数组。我希望得到第一个索引,其值大于O(1)中的目标,在java。
中例如:int arr [] = {1,4,7,9,15,30} 目标= 10 我的函数应该返回4,索引为15。
答案 0 :(得分:5)
为了能够通过数组找到具有特定属性(例如:大于目标)的值的索引,您必须遍历实现搜索算法的数组。
因此无法实现O(1)。
java.util.Arrays
中的实现。答案 1 :(得分:1)
如果您准备这样的索引数组(或地图)。
int[] a = {1,4,7,9,15,30};
// prepare indices array
int[] indices = new int[a[a.length - 1] + 1];
for (int i = 0, j = 0, aLength = a.length; i < aLength; ++i)
while (j <= a[i])
indices[j++] = i;
System.out.println(Arrays.toString(indices));
// -> [0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
// get the first index whose value is greater than a target in O(1)
System.out.println(indices[10]); // -> 4 (index of 15)
您可以在O(1)中按indices[target]
获取索引值。