C 在给定数组中查找给定元素

C 在给定数组中查找给定元素,c,arrays,algorithm,C,Arrays,Algorithm,我有一个整数数组,其中连续元素的差只有一个 |arr[i]-arr[j]|=1, where |i-j|=1 不使用线性搜索 假设我们的数组是 arr[]=5,4,3,2,1,0,-1,-2,-1,0,1,2,1; 我们必须找出给定值第一次发生的指数,比如说,-1 因此,我们的输出是6 我们可以用什么方法来解决这个问题 我已经尝试过,取给定数字和当前元素之间的差值,然后继续 但我认为我错了,因为它也被称为线性搜索。请帮帮我。cand我认为你的方法是可以的,因为线性搜索意味着你遍历每个元素一

我有一个整数数组,其中连续元素的差只有一个

|arr[i]-arr[j]|=1, where |i-j|=1
不使用线性搜索

假设我们的数组是

 arr[]=5,4,3,2,1,0,-1,-2,-1,0,1,2,1;
我们必须找出给定值第一次发生的指数,比如说,
-1
因此,我们的输出是
6

我们可以用什么方法来解决这个问题

我已经尝试过,取给定数字和当前元素之间的差值,然后继续


但我认为我错了,因为它也被称为线性搜索。请帮帮我。

cand我认为你的方法是可以的,因为线性搜索意味着你遍历每个元素一次,直到找到答案,但你不这样做。

在这种情况下,排序列表和使用二进制搜索是有效的还是更为优化?不,排序将是
n lon(n)
,而最坏的情况是
O(n)
@npinti二进制搜索在
O(logn)
中工作,该解决方案在搜索2时,对于
arr=[1,0,1,0,1,0。所以-如果您可以将数组作为预处理进行排序,则会更好,否则-否-如Alma所述。感谢您让它更清楚:)@amit不是两个元素之间的差异应该是1或-11,-1,1。。区别是2。我认为更好的问题是,这可以在O(lgn)时间内完成,而不需要排序吗?否则,收益可以忽略不计。
cand <- 0
repeat:
    if arr[cand] == x:
       done
    else:
       cand <- cand + |arr[cand]-x|