给定一个数组,其中每个元素与其前一个元素的差异为+ 1 / -1,找到给定(输入)元素的第一次出现(位置),而不使用线性搜索,例如: - let array = 4,5,6 ,5,6,7,8,9,10,9,8,9,10,11 ...输入 - 10输出 - 8(首次出现10位于第8位)
答案 0 :(得分:0)
执行此操作的一种简单方法是通过目标值和当前值之间的差异在数组中向前跳过。因此,在您的示例中,目标是10.从第一个元素开始,看到10(目标)和4(当前值)之间的差异是6.给定任何两个相邻值只会相差一个,您知道第一次出现10必须在阵列中进一步至少6个点。因此,请跳过并重复此过程,直到找到第一个索引。您的代码可能如下所示:
int find_first_occurrence(int target, int array[])
{
int index = 0;
while (index <= array.count())
{
if (array[index] == target)
{
return index;
}
index += abs(array[index] - target);
}
// Returning -1 would indicate that the target is not in the array
return -1;
}